PHP MySQL : issue selecting different columns from the same table

标签 php mysql select pdo

这个问题以前肯定出现过,但我还没有找到解决方案。我正在尝试从数据库中选择用户名和密码来验证用户一个简单的登录脚本。它应该简单地在用户表中找到一行,其中的用户名和密码与通过登录表单提交的用户名和密码相匹配。

我可以毫无问题地匹配用户名,但不能匹配密码,我不知道为什么。

该表包含名为“用户名”和“密码”的列,表中只有 1 行包含用户名“admin”和密码“testpassword”。

这是包含三个选项的函数 - 选项 1 和 4 有效,其他两个无效。选项 2 与选项 1 相同,只是它查找不同的列。我已检查查询中的列名是否与表中的列匹配,以及提交的值是否匹配。我没有收到任何错误消息,也看不出可能出了什么问题(一些基本问题,我敢肯定...)。

function new_session ($username, $pw, $inactive) {

    // echo statements verify that variable match database values
    echo "<h2>username = " . $username . "</h2>";
    echo "<h2>password = " . $pw . "</h2>";
    echo "<h2>inactive = " . $inactive . "</h2>";

    $db = mydb::getConnection();

    //option 1
    $statement = $db->prepare('SELECT * FROM users WHERE username = :parameter');
    $statement->bindValue(':parameter', $username);

    //option 2
    //$statement = $db->prepare('SELECT * FROM users WHERE password = :parameter');
    //$statement->bindValue(':parameter', $pw);

    //option 3
    //$statement = $db->prepare('SELECT * FROM users WHERE password = :parameter1 AND username = :parameter2');
    //$statement->bindValue(':parameter1', $username);
    //$statement->bindValue(':parameter2', $pw);

    //option 4
    //$statement = $db->prepare('SELECT * FROM users WHERE username = "admin" AND password = "testpassword"');

    $statement->execute();
    $row = $statement->fetchAll();

    if (count($row) == 1) {
        // SESSION data is set here for options 1 and 4
    } 
}

最佳答案

您需要检查的第一件事是数据库中的密码是否经过哈希处理。它们可能应该是,如果是,您需要使用散列函数 PASSWORD

进行比较
$statement = $db->prepare('SELECT * FROM users WHERE password = PASSWORD(:parameter)');
$statement->bindValue(':parameter', $pw);

现在,如果您的密码没有经过哈希处理(真丢人),您可能会遇到不同的问题。上面可以看到,password是mysql中的一个函数名。解析您的语句可能有问题,因为您使用 password 作为列名。在列名称 password 周围放置 刻度线。像这样:

$statement = $db->prepare('SELECT * FROM users WHERE `password` = :parameter');
$statement->bindValue(':parameter', $pw);

请注意,这些是刻度标记,而不是单引号。它们位于 ~ 所在的同一键上,位于 Tab 键上方。这些 刻度线 将指示 password 是一个列名。

关于PHP MySQL : issue selecting different columns from the same table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22386508/

相关文章:

php - 数据库未连接

php - jQuery Mobile 不听 e.PreventDefault

javascript - 使用 jquery、javascript、wordpress 更改分页数

mysql - 嵌套集查询以检索每个节点的所有祖先

sockets - select()ing概念写入fd_set

php - 不在对象上下文中时使用 $this 时出错

php - 小于运算符给出奇怪的结果

java - Android 应用程序崩溃数据库

mysql - 如何同步不同服务器的两个数据库?

mysql - mysql语句中的group_concat