使用MySQLi预处理语句检查现有记录

时间:2013-04-22 18:54:17

标签: php mysql mysqli

所以我编写了一个脚本来在表格中插入电子邮件地址,但我想检查地址是否已经存在。所以我从准备好的声明开始:

$statement = $db->prepare("SELECT * FROM `signups` WHERE `signups_email`= ? ");
$statement->bind_param('s',$email);
$statement->execute();

if($statement->num_rows < 1){ 
     $statement->close(); //Free up the SQL result
    //do the inserting code
} else {
    echo "Email already exists";
}

麻烦的是,($statement->num_rows < 1)似乎总是返回true,即使我知道数据库中有电子邮件。即它没有发现该地址已经存在于数据库中。

我的连接等很好,因为//do the inserting code位工作正常。

2 个答案:

答案 0 :(得分:1)

查看mysqli_num_rows的文档。

  

返回结果集中的行数。指某东西的用途   mysqli_stmt_num_rows()取决于你是否使用过   mysqli_stmt_store_result()缓冲整个结果集   陈述句柄。

     

如果你使用mysqli_stmt_store_result(),mysqli_stmt_num_rows()可能是   立即打电话。

看起来你需要在检查行数之前调用store_result()。

答案 1 :(得分:0)

如果数据库中已存在电子邮件,则您的声明将失败。 if()应为

if ($statement->num_rows == 0) {
   ... email does not exist, insert it
} else {
   ... at least one record with that email exists
}