我有一个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'列的预准备语句?
答案 0 :(得分:5)
试试这个:
$sql = $connection->prepare("INSERT INTO users (first_name, last_name, email, username, password) VALUES(?,?,?,?,?)");
即使您将id
列添加回表格,这也应该有效。没有它也应该有效。
由于要忽略第一列,您必须指定要插入的列。第一列不会因为您调用它id
而被忽略,或仅仅因为它是auto_increment
而被忽略。 SQL会按照你告诉它的方式执行,它只是假设你给它的第一个参数应该放在表的第一列。
通常情况下,查询会像上面那样编写,包括表名,因此如果某人因某种原因修改了表,则某些内容不会中断。当然,你不应该在生产情况下随意修改,但你明白了。
请注意,您需要按照与计划插入相同的顺序指定列。