2013-02-07 62 views
12

我正試圖插入mySQL數據庫。第一列是'id'列,因爲它是一個auto_increment字段,所以我將它留爲空白。出於某種原因,我無法插入,我得到了下面提到的錯誤。我感謝任何幫助。不正確的整數值:''在第1行'id'列

我收到以下錯誤,而試圖插入:

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

我的查詢

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

什麼是你的表結構 - 看起來像你是第一個字段是一個整數,它不能除了''...嘗試傳遞列,然後是值 - 它可能是一個標識列... – sgeddes

回答

22

這可能意味着你的idAUTO_INCREMENT整數,你要發送一個字符串。您應該指定一個列表並從INSERT中省略。

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

哦,我明白了,我會試一試。 – AnchovyLegend

+0

+1謝謝,這工作很好。 – AnchovyLegend

+2

當我來到這裏時,我已經知道這個選項,但是我認爲這很有幫助,因爲之前在我的在線服務器上工作的代碼,但沒有在我的本地主機上 –

13

爲了讓MySQL的生成序列號爲AUTO_INCREMENT場,你有三種選擇:

  1. 指定列表中的列清單,並從中省去您auto_incremented列NJK建議。 這將是最好的方法。查看評論。
  2. 明確指定NULL
  3. 明確指定0

3.6.9. Using AUTO_INCREMENT:是爲AUTO_INCREMENT列因此MySQL 分配序列號自動指定

... 沒有價值。您還可以明確地將 指定爲NULL或以生成序列號。

這三個語句會產生相同的結果:

$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我喜歡選項2和3,他們節省了很多打字:)謝謝! – AnchovyLegend

+1

@MHZ您應該始終使用列列表。如果表格結構發生變化,會發生什麼?如果列缺省值爲NULL,則不需要顯式指定NULL。 – Kermit

+2

選項1實際上是「更好」的方法,當列被添加到表中時,將使應用程序免受MySQL拋出錯誤的影響,或者(如果列重新排序,則更糟糕的是將值填入錯誤的列)。對於快速和骯髒的工作,0或NULL技巧就足夠了。但是對於要在部署的應用程序中運行的代碼,您希望選項1. – spencer7593

0

這是因爲你的數據發送列類型是整數,你要發送一個字符串值給它。

所以,下面的方法爲我工作。 試試這個。

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

請勿使用'null'。使用它作爲null沒有單引號。

相關問題