为什么没有准备好的声明似乎(再次)绑定结果?

时间:2014-07-17 21:07:50

标签: php mysql authentication prepared-statement prepare

我是PHP / MySQL的新手。我正在进行身份验证,但我的代码不允许我进入正确的页面。这就是我所拥有的:

    <?php
$username = null;
$password = null;

if ($_SERVER['REQUEST_METHOD'] == 'POST') {

    require_once('database.php');

    if(!empty($_POST["username"]) && !empty($_POST["password"])) {
        $username = $_POST["username"];
        $password = $_POST["password"];

        $query = $connection->prepare("SELECT user_id FROM users WHERE user_login = ? and user_password = PASSWORD(?)");
        $query->bind_param("ss", $username, $password);
        $query->execute();
        $query->bind_result($userid);
        $query->fetch();
        $query->close();

        if(!empty($userid)) {
// Stuff happens
} else {
// goes back to the login page

此时,$ userid似乎是空的,因为我一直回到登录页面。 database.php只是连接,我确信这没关系。我还确认表单正确提交了$ _POST [&#34;用户名&#34;]和$ _POST [&#34;密码&#34;],上面的代码创建了$ username和$ password。我可以回应那些看到正确的结果。数据库中的字段名称与SQL语句中的字段名称匹配。但由于某种原因,$ userid是空的。我已经阅读了其他帖子,但我几乎不了解我在做什么,更不用说别人在做什么或解释什么了。我认为这是非常基本的,但它是什么?

1 个答案:

答案 0 :(得分:0)

为什么是PASSWORD()?

    $query = $connection->prepare("SELECT user_id FROM users WHERE user_login = ? and user_password = ?");
    $query->bind_param("ss", $username, $password);
    $query->execute();
    $query->bind_result($userid);
    $query->fetch();
    $query->close();