devo leggere un file di testo (delimitato) e inserire le righe nei campi di un DB... e non ci sarebbe niente di strano se non fosse che la query se inserita in mysql... funziona, inserita in uno script php...no
il file da leggere è questo:
101|0|"Nome Cognome"|"Citta"|1|0|0|0.0|0|0|0.0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1
sono in tutto 28 valori di diverso tipo, principalmente integer poi float e testo
questo l'errore:
Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'ID_Dati' at row 1
questo è l'errore generato cercando di inserire un valore nullo per il campo autoicrementale
... questo cercando di inserire un valore nel campo autoincrementale:
Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '100' for key 'PRIMARY'
questo cercando di fare inserire automaticamente il valore del campo autoincrementale:
Fatal error: Uncaught PDOException: SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1
PRECISAZIONI:
- per semplicità ho importato solo i primi 10 valori del file di testo;
- la tabella ha 2 ulteriori campi: ID_Dati (campo autoincrementale e camp che va valorizzato con la variabile $camp)
- ho fatto le prove anche specificando la lista completa dei campi della tabella (con e senza il campo autoincrementale)
...di prove ne ho fatte tante ma non ho trovato quella giusta... avete qualche idea?
il file da leggere è questo:
101|0|"Nome Cognome"|"Citta"|1|0|0|0.0|0|0|0.0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1
sono in tutto 28 valori di diverso tipo, principalmente integer poi float e testo
PHP:
$camp=23;
$textarray=file("file.txt");
for($i=0; $i<count($textarray); $i++)
{
$text=substr($textarray[$i],0,-1);
list($var1,$var2,$var3,$var4,$var5,$var6,$var7,$var8,$var9,$var10)=explode('|',$text);
$database->query('INSERT INTO Tabella VALUES (
\'\',
:camp,
:var1,
:var2,
:var3,
:var4,
:var5,
:var6,
:var9,
:var10)');
// $database->bind(':id', 100);
$database->bind(':camp', $camp);
$database->bind(':var1', $var1);
$database->bind(':var2', $var2);
$database->bind(':var3', str_replace('"', '', $var3));
$database->bind(':var4', str_replace('"', '', $var4));
$database->bind(':var5', $var5);
$database->bind(':var6', $var6);
$database->bind(':var9', $var9);
$database->bind(':var10', $var10);
$database->execute();
}
questo l'errore:
Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'ID_Dati' at row 1
questo è l'errore generato cercando di inserire un valore nullo per il campo autoicrementale
PHP:
$database->query('INSERT INTO TB_DatiGiornate VALUES (
:id,
:camp,
.........
$database->bind(':id', 100);
$database->bind(':camp', $camp);
... questo cercando di inserire un valore nel campo autoincrementale:
Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '100' for key 'PRIMARY'
PHP:
$database->query('INSERT INTO TB_DatiGiornate VALUES (
:camp,
..............
$database->bind(':camp', $camp);
questo cercando di fare inserire automaticamente il valore del campo autoincrementale:
Fatal error: Uncaught PDOException: SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1
PRECISAZIONI:
- per semplicità ho importato solo i primi 10 valori del file di testo;
- la tabella ha 2 ulteriori campi: ID_Dati (campo autoincrementale e camp che va valorizzato con la variabile $camp)
- ho fatto le prove anche specificando la lista completa dei campi della tabella (con e senza il campo autoincrementale)
Codice:
INSERT INTO Tabella (ID_Dati, Camp, var1, var2, var3, var4, var5, var6, var9, var10) VALUES (':id', :camp, :var1, :var2, :var3, :var4, :var5, :var6, :var9, :var10)');
oppure
INSERT INTO Tabella (Camp, var1, var2, var3, var4, var5, var6, var9, var10) VALUES (':camp, :var1, :var2, :var3, :var4, :var5, :var6, :var9, :var10)');
...di prove ne ho fatte tante ma non ho trovato quella giusta... avete qualche idea?