2010-02-09 61 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生成的,所以不需要传递该列。