1

我有以下功能,它应该检查要添加到数据库中的新电子邮件地址是否已经存在。

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';
}

问题是没有检测到,我已经在数据库中的一个电子邮件地址上进行了测试,但它失败了,它就像它不存在一样通过了。有什么想法失败了吗?谢谢

4

1 回答 1

1

这可能无法回答您的问题,但防御性编程风格会建议您将语句更改为if ($rows >= 1)以防您的测试电子邮件地址多次包含在您的数据库中。

此外,您应该处理您if ($stmt = mysqli_prepare...)不返回 true 的情况。它只会落入您的代码的其余部分并且不返回任何内容,我认为这可能被解释为错误。如果失败,至少打印出一些调试代码(或引发异常)。

于 2013-01-28T23:17:02.287 回答