1
$mysqli = mysqli_connect("localhost", "root", "pass", "test");

function check_login($mail,$pwd){   
    global  $mysqli;    
    if($stmt=  $mysqli->prepare('SELECT COUNT(*) FROM `users` WHERE mail = ? AND pwd = MD5(?)')){
        $stmt->bind_param("ss", $mail, $pwd);       
        $stmt->execute();
        $stmt->bind_result($count);
        $stmt->close();
        var_dump($count);
    }
    return ($count > 0 ? true : false);
}

check_login('test@gmail.com','pass');

我通过在stackoverflow上看到一些脚本来编写这个脚本。我尝试运行它,发现脚本执行后$count为NULL。

我想知道为什么这对我不起作用。我试图在 Mysql 上运行相同的命令,它向我展示了结果。

有人帮我解决它..

4

2 回答 2

1

mysqli::bind_result需要在调用之后->execute和调用之前->fetch调用。fetch() 不是可选的,因为(绑定结果)变量引用只是手动提取结果行的替代方法。

所以在你的代码中:

    $stmt->execute();
    $stmt->bind_result($count);
    $stmt->fetch();  // result array thrown away
于 2012-11-24T04:32:26.360 回答
1

首先,您不应该只是复制和粘贴代码,尤其是那些需要弄乱数据库的代码;了解代码试图实现的目标,然后编写你的代码。
二、更换

 
  'SELECT COUNT(*) FROM `users` WHERE mail = ? AND pwd = MD5(?)'
 

 
 'SELECT COUNT(*) FROM `users` WHERE mail =? AND pwd =?'
 

代码可能没有运行,因为您的密码以明文形式存储在数据库中。
让我们知道这是否有效。

于 2012-11-24T04:32:50.953 回答