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

fdf*_*fds 12 php mysql mysqli insert auto-increment

我在一个有4列的表上工作,第一个是一个名为id的自动递增整数.

如果我要使用mysqli预处理语句插入到此表中,我一直无法插入有效的查询.使用PHPmyAdmin它告诉我将它赋予NULL.我试过这个:

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

还有这个

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

并且只给出bind_param 3个参数(最后3个).这些都不奏效.我也试过这个:

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

这些都不起作用.是否有标准化的方式插入这种类型的表?

Tat*_*nen 17

只需跳过该id字段,MySQL将自动填写:

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


Pas*_*TIN 7

如果该id字段是auto_increment,则只需在insert查询中不指定它:

$query = "INSERT INTO tbl (col2, col3, col4) VALUES (?, ?, ?)";
Run Code Online (Sandbox Code Playgroud)

当然,不要试图绑定任何参数;-)


由于它是由MySQL生成的,因此无需传递该列.


Sar*_*raz 5

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

 $query = "INSERT INTO tbl (col2, col3, col4) VALUES (?, ?, ?)";
Run Code Online (Sandbox Code Playgroud)

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