为什么fetch在SQL中不起作用

时间:2014-03-04 03:50:01

标签: php sql mysqli

我有这个变量来存储函数的结果:$var check=mailExists($email,$link)。它应该是1或2,但它总是返回1 ... $email是要在DB处检查的传递值,$link是要使用的mysqli处理程序。我也在'rowsDEB'处打印获取的结果,它总是显示0.这是我的功能:

function mailExists($email, $link){
    $stmt = "";
    $result = 1; //no such mail
    $stmt = "SELECT email FROM users WHERE email = '$email'";
    mysqli_query($link,$stmt);
    mysqli_stmt_store_result($stmt);
    mysqli_stmt_bind_result($stmt);

    $rows = 0;
    while(mysqli_stmt_fetch($stmt)){
        $rows++;    
    }
    $_SESSION['rowsDEB'] = $rows;
    if(rows != 0) $result = 2; //mail exists in DB

    mysqli_stmt_free_result($stmt);
    mysqli_stmt_close($stmt);
    discDB($link);
    return $result; 
}

2 个答案:

答案 0 :(得分:1)

我假设你的$link基本上是一个数据库连接变量。这是一个简单但有用的mysqli示例,使用面向对象的方法。仅在sql语句中使用select count,它更有效。

<?php
function mailExists($email, $link){
    $sql= "SELECT COUNT(email) FROM users WHERE email = ? "; // use parameterized query
    $stmt = $link-> prepare($sql);
    $stmt -> bind_param('s',$email); // bind your variable to parameter
    $stmt -> execute(); // execute the query
    $stmt -> bind_result($CounterResult); // bind result into variable
    $stmt -> store_result();
    $stmt -> fetch();
}

return $CounterResult; // return total rows found
?>

我从here那里得到了例子。还有一些例子可以帮助你。希望这可以帮助任何人,谢谢。

答案 1 :(得分:0)

我不知道这段代码是否有问题,但我已经改变了它,以及其他功能中的其他一些修复,现在一切正常。另外我注意到我在$错过了if(rows != 0) $result = 2; //mail exists in DB,所以这可能导致了问题。在我更改了所有内容后找到它...仅发布功能代码:

function mailExists($email, $link){
    $result = false; //no such mail
    $query= "SELECT email FROM users WHERE email = '$email'";
    if($stmt = mysqli_prepare($link,$query)){
        mysqli_execute($stmt);  
        mysqli_stmt_store_result($stmt);
        $rows = mysqli_stmt_num_rows($stmt);
        mysqli_stmt_free_result($stmt);
        mysqli_stmt_close($stmt);
}

$_SESSION['rowsDEB'] = $rows;
if($rows > 0) $result = true; //mail exists in DB

return $result; 

}