准备好的语句和auto_increment错误

时间:2017-08-13 10:59:34

标签: 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    |                |

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

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

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

我删除了'id'列,现在效果很好。

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

1 个答案:

答案 0 :(得分:5)

试试这个:

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

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

由于要忽略第一列,您必须指定要插入的列。第一列不会因为您调用它id而被忽略,或仅仅因为它是auto_increment而被忽略。 SQL会按照你告诉它的方式执行,它只是假设你给它的第一个参数应该放在表的第一列。

通常情况下,查询会像上面那样编写,包括表名,因此如果某人因某种原因修改了表,则某些内容不会中断。当然,你不应该在生产情况下随意修改,但你明白了。

请注意,您需要按照与计划插入相同的顺序指定列。