【发布时间】:2020-11-11 21:55:00
【问题描述】:
我想从用户那里获取电子邮件地址,以将他们添加到邮件列表中。但是,我想防止重复条目,所以我使用 INSERT IGNORE 方法。我正在使用下面的 PHP 脚本,但经常收到此错误:
致命错误:未捕获的错误:在 bool 上调用成员函数 bind_param()
我已经查看了很多关于此错误的 SO 文章,但仍然无法使其正常工作。我已经确认 $email 和 $id 变量确实有值。我怀疑这个错误一定与 IGNORE 的使用有关,但老实说我不知道。
这是我的代码:
$email = filter_input(INPUT_POST, 'email',FILTER_SANITIZE_EMAIL);
$id = filter_input(INPUT_POST, 'id',FILTER_VALIDATE_INT) ?: NULL;
$sqlQuery = 'INSERT IGRNORE INTO email(email, id) VALUES(:email,:id);';
$stmt = $dbc->prepare($sqlQuery);
$stmt->bind_param(':email',$email);
$stmt->bind_param(':id',$id);
$stmt->execute();
mysqli_close($dbc);
我尝试只包含一个用于插入的变量,但我得到了针对两个 bind_param 行的错误。当我将这个结构设置为在单个 bind_param 条目中包含两个变量时,我也遇到了错误。
我愿意接受其他避免数据库中重复电子邮件的方法,只要它们可以使用单个 PHP 文件来完成。
【问题讨论】:
-
如果直接在mysql服务器上运行sql命令会发生什么(用值代替占位符)?
-
您正在混合使用 PDO 和 mysqli。 mysqli 没有命名占位符,也没有单一绑定。
-
IGRNORE 不是一个词。可能最好忽略。
-
@RobBiermann 在服务器上运行命令仍然产生相同的错误,即使从单词 IGNORE (@Strawberry) 中删除了多余的 R。最后,我通过接受这个问题的答案找到了成功:stackoverflow.com/questions/25996040/…
标签: php mysql mysqli sql-insert