2010-02-09 58 views
8

我正在一個有4列的表上工作,第一個是一個叫做id的自動遞增整數。PHP Mysqli插入一行到auto_increment列的表

如果即將使用mysqli準備好的語句插入到此表中,我仍然遇到插入工作的查詢時遇到問題。使用PHPmyAdmin它告訴我給它NULL。香港專業教育學院嘗試這樣:

$query = "INSERT INTO tbl (id, col2, col3, col4) VALUES ('NULL', ?, ?, ?)"; 
$stmt -> bind_param("ssi", $col2, $col3, $col4) 

$query = "INSERT INTO tbl (id, col2, col3, col4) VALUES (NULL, ?, ?, ?)"; 
$stmt -> bind_param("ssi", $col2, $col3, $col4) 

,並只給bind_param 3個參數(最後3)。這些都沒有工作。我也試過這個:

$null = NULL; 
$query = "INSERT INTO tbl (id, col2, col3, col4) VALUES (?, ?, ?, ?)"; 
$stmt -> bind_param("issi", $null, $col2, $col3, $col4); 

沒有這些工作。是否有插入這種類型的表的標準方式?

+0

你是否也想明確插入自動遞增字段? – Sarfraz 2010-02-09 06:27:31

回答

12

只跳過id領域,MySQL將自動填充它:

$query = "INSERT INTO tbl (col2, col3, col4) VALUES (?, ?, ?)"; 
$stmt->bind_param("ssi", $col2, $col3, $col4) 
+0

非常感謝。這個答案應該被標記爲正確的答案。 – Edwinfad 2017-11-16 21:55:24

2

這一個

$query = "INSERT INTO tbl (id, col2, col3, col4) VALUES (NULL, ?, ?, ?)"; 
$stmt -> bind_param("ssi", $col2, $col3, $col4) 

應該肯定的工作。你得到了什麼確切的錯誤?

現在我看起來更好,你有$查詢和$ stmt。你有什麼?可能你錯過了一些部分。

應該

$stmt = $mysqli->prepare("INSERT INTO tbl (id, col2, col3, col4) VALUES (NULL, ?, ?, ?)"); 
$stmt -> bind_param("ssi", $col2, $col3, $col4); 
$stmt ->execute(); 
3

這應該工作,因爲ID自動添加由MySQL(增加這個原因):

$query = "INSERT INTO tbl (col2, col3, col4) VALUES (?, ?, ?)"; 

在某些情況下,你必須明確地插入auto_incremtnt場,如果是這種情況,那麼你可以使用INSERT IGNORE語句,參見mysql手冊瞭解更多信息。

4

如果id場是auto_increment,那麼就不要在您insert查詢指定:

$query = "INSERT INTO tbl (col2, col3, col4) VALUES (?, ?, ?)"; 

,當然,不要嘗試任何參數綁定到它;-)


由於它是由MySQL生成的,所以不需要傳遞該列。