PHP Mysqli使用auto_increment列向表中插入一行

时间:2010-02-09 06:21:09

标签: php mysql insert mysqli auto-increment

我正在处理一个有4列的表,第一个是一个名为id的自动递增整数。

如果我要使用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);

这些都不起作用。是否有标准化的方式插入此类表格?

4 个答案:

答案 0 :(得分:15)

只需跳过id字段,MySQL就会自动填写:

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

答案 1 :(得分:6)

如果id字段是auto_increment,那么就不要在insert查询中指定它:

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

当然,不要尝试将任何参数绑定到它; - )


由MySQL生成,不需要传递该列。

答案 2 :(得分:4)

这应该有效,因为mysql会自动添加id(由于这个原因递增):

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

在某些情况下,您必须显式插入auto_incremtnt字段,如果是这种情况,那么您可以使用INSERT IGNORE语句,请参阅mysql手册以获取有关它的更多信息。

答案 3 :(得分:2)

这一个

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

肯定会奏效。你得到的确切错误是什么?

现在我看起来更好,你有$ query和$ stmt。你们之间有什么关系?可能你错过了一些部分。

应该是

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