Php 将行插入到具有自动增量列的表中

Php 将行插入到具有自动增量列的表中,php,mysql,insert,mysqli,auto-increment,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) $null = NULL; $

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

如果我要使用mysqli准备的语句插入到这个表中,那么插入一个有效的查询就会遇到麻烦。使用phpMyAdmin,它告诉我将其设为NULL。我试过这个:

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

$query = "INSERT INTO tbl (id, col2, col3, col4) VALUES (NULL, ?, ?, ?)";
$stmt -> bind_param("ssi", $col2, $col3, $col4)
并且只给出bind_param 3个参数(最后3个)。这两个都不管用。我也试过:

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

这些都不管用。是否有一种标准化的方法插入到这种类型的表中?

只需跳过
id
字段,MySQL将自动填充它:

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

$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();

这应该是可行的,因为mysql会自动添加id(因此会增加):

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

在某些情况下,您必须显式插入自动增量字段,如果是这种情况,那么您可以使用
insert IGNORE
语句,请参阅mysql手册了解更多信息。

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

$query = "INSERT INTO tbl (col2, col3, col4) VALUES (?, ?, ?)";
当然,不要试图将任何参数绑定到它;-)



由于它是由MySQL生成的,所以不需要传递该列。

您是否也要显式插入自动递增字段?“继续遇到问题”听起来好像您应该开始检查错误消息。它们可能会帮助您更容易地发现错误,而不仅仅是摆弄它,直到它工作为止。非常感谢您。请将此答案标记为正确答案。