mysqli_stmt_num_rows,mysqli_stmt_execute和mysqli_store_result

时间:2013-01-28 23:06:28

标签: php

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

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

1 个答案:

答案 0 :(得分:1)

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

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