准备好的语句和auto_increment错误

1 php mysql

我有一个MySQL表,看起来像这样

| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| first_name | varchar(256) | NO   |     | NULL    |                |
| last_name  | varchar(256) | NO   |     | NULL    |                |
| email      | varchar(256) | NO   |     | NULL    |                |
| username   | varchar(256) | NO   |     | NULL    |                |
| password   | varchar(256) | NO   |     | NULL    |                |
Run Code Online (Sandbox Code Playgroud)

我已经尝试为我的注册系统使用预准备语句:

$sql = $connection->prepare("INSERT INTO users VALUES(?,?,?,?,?)");
$sql->bind_param('sssss', $first, $last, $email, $username, $pwd);
$sql->execute();
Run Code Online (Sandbox Code Playgroud)

但我收到此错误:致命错误:未捕获错误:在布尔值上调用成员函数bind_param().

我删除了'id'列,现在它工作正常.

如何在表格中使用带有"id"列的预准备语句?

Dan*_*sky 5

试试这个:

$sql = $connection->prepare("INSERT INTO users (first_name, last_name, email, username, password) VALUES(?,?,?,?,?)");

即使您将id列添加回表中,这也应该有效.它也应该没有它.

由于要忽略第一列,因此必须指定要插入的列.第一列不会因为您调用它而被忽略id,或者仅仅因为它被调用auto_increment.SQL将执行您告诉它的操作,它只是假设您提供的第一个参数应该放在表的第一列中.

通常,查询的编写方式与上面类似,包括表名,以便在某人因某种原因修改表的情况下,某些内容不会中断.当然,你不应该在生产情况下随意修改,但你明白了.

请记住,需要按照计划插入列的顺序指定列.