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