2013-02-07 14 views
12

Sto tentando di inserire nel mio database mySQL. La prima colonna è la colonna 'id', dato che è un campo auto_increment, l'ho lasciato vuoto. Per qualche motivo, non riesco a inserire e sto ricevendo l'errore indicato di seguito. Apprezzo qualsiasi aiuto con questo.Valore intero errato: '' per 'ID' colonna alla riga 1

sto ottenendo il seguente errore durante il tentativo di inserire:

Incorrect integer value: '' for column 'id' at row 1 

mia domanda

$insertQuery = "INSERT INTO workorders VALUES('', '$priority', '$requestType', '$purchaseOrder', '$nte', '$jobSiteNumber')"; 
+0

Qual è la struttura della tabella: sembra che il primo campo sia un numero intero e non può che ... "" Prova a passare le colonne e poi i valori: è probabilmente una colonna Identità ... – sgeddes

risposta

22

Questo probabilmente significa che il vostro è un idAUTO_INCREMENT intero e si sta cercando di inviare una stringa . Devi specificare un elenco di colonne e ometterlo dal tuo INSERT.

INSERT INTO workorders (column1, column2) VALUES ($column1, $column2) 
+0

Oh, vedo, farò un tentativo. – AnchovyLegend

+0

+1 Grazie, ha funzionato magnificamente. – AnchovyLegend

+2

Quando venivo qui, conoscevo già questa opzione, ma pensavo che fosse qualcosa di diverso dal codice precedentemente funzionante sul mio server online ma non sul mio host locale –

13

Per lasciare MySql generare numeri di sequenza per un campo AUTO_INCREMENT avete tre opzioni:

  1. specifichiamo List un elenco di colonne e omettere la vostra colonna auto_incremented da esso come njk suggerito. Questo sarebbe l'approccio migliore. Vedere i commenti.
  2. assegnare esplicitamente NULL
  3. assegnare esplicitamente 0

3.6.9. Using AUTO_INCREMENT:

... Nessun valore è stato specificato per la colonna AUTO_INCREMENT, quindi MySQL numeri di sequenza assegnati automaticamente. È anche possibile esplicitamente assegnare NULL o alla colonna per generare numeri di sequenza.

Queste tre affermazioni produrranno lo stesso risultato:

$insertQuery = "INSERT INTO workorders (`priority`, `request_type`) VALUES('$priority', '$requestType', ...)"; 
$insertQuery = "INSERT INTO workorders VALUES(NULL, '$priority', ...)"; 
$insertQuery = "INSERT INTO workorders VALUES(0, '$priority', ..."; 
+0

+1 Mi piacciono molto le opzioni 2 e 3, risparmiano molto digitazione :) grazie! – AnchovyLegend

+1

@ MHZ Si dovrebbe sempre usare un elenco di colonne. Cosa succederebbe nel caso in cui la struttura della tua tabella cambi? L'assegnazione esplicita di 'NULL' non è necessaria se la colonna di default è' NULL'. – Kermit

+2

L'opzione 1 è davvero l'approccio "migliore" e isolerà la tua applicazione dall'avere errori di lancio di MySQL quando una colonna viene aggiunta alla tabella o (ancora peggio) con valori inseriti nelle colonne sbagliate se le colonne vengono riordinate. Per lavoro veloce e sporco, i trucchi 0 o NULL sono sufficienti. Ma per il codice che verrà eseguito all'interno di un'applicazione distribuita, si desidera l'opzione 1. – spencer7593

0

Questo perché i dati di invio tipo di colonna è intero e il vostro sono l'invio di un valore stringa ad esso.

Quindi, il modo seguente ha funzionato per me. Prova con questo.

$insertQuery = "INSERT INTO workorders VALUES (
        null, 
        '$priority', 
        '$requestType', 
        '$purchaseOrder', 
        '$nte', 
        '$jobSiteNumber' 
       )"; 

Non utilizzare 'null'. usalo come null senza virgolette singole.

Problemi correlati