0

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

$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位工作正常。

4

2 回答 2

0

如果电子邮件已存在于数据库中,则您的语句将失败。if()应该是

if ($statement->num_rows == 0) {
   ... email does not exist, insert it
} else {
   ... at least one record with that email exists
}
于 2013-04-22T18:58:24.517 回答
0

查看mysqli_num_rows的文档。

返回结果集中的行数。mysqli_stmt_num_rows() 的使用取决于您是否使用 mysqli_stmt_store_result() 来缓冲语句句柄中的整个结果集。

如果使用 mysqli_stmt_store_result(),mysqli_stmt_num_rows() 可能会立即被调用。

看起来您需要先调用 store_result() 才能检查行数。

于 2013-04-22T19:01:27.417 回答