我有以下功能,应检查是否已将新的电子邮件地址添加到数据库中。
function duplicate_email($email_y){
$dbCon = db_connect();
$sql = "SELECT email FROM users WHERE email = ?";
if ($stmt = mysqli_prepare($dbCon, $sql)) {
mysqli_stmt_bind_param($stmt, "s", $email_y);
mysqli_stmt_execute($stmt);
//mysqli_store_result($dbCon);
$rows = mysqli_stmt_num_rows($stmt);
if($rows == 1){
mysqli_stmt_close($stmt);
mysqli_close($dbCon);
return true;
}
else{
mysqli_stmt_close($stmt);
mysqli_close($dbCon);
return false;
}
}
}
这是我使用它的地方:
if(duplicate_email($email) == true){
echo 'Email [ '.$email.' ] seems to be already used';
}
问题是没有检测到,我已经在数据库中的电子邮件地址上进行了测试但是它失败了,它就像它不在那里一样。 任何失败的想法? THX
答案 0 :(得分:1)
这可能无法解答您的问题,但防御性编程风格会建议您将语句更改为if ($rows >= 1)
,以防您的测试电子邮件地址多次包含在您的数据库中。
此外,您应该处理if ($stmt = mysqli_prepare...)
未返回true的情况。它只会落到你的代码的其余部分并且什么都不返回,我认为这可能被解释为错误。至少,如果失败,打印出一些调试代码(或引发异常)。