【问题标题】:PDO script to get the amount of rows not working?获取行数的 PDO 脚本不起作用?
【发布时间】:2011-08-16 11:16:15
【问题描述】:

我是 PDO PHP 新手(今天才开始)。我也在尝试编写登录函数,但它返回 false,即使我知道凭据是正确的。

我认为是尝试获取导致脚本出错的行数,您能帮忙吗?

function check_login($email, $username, $password)
{
    $host = 'localhost';
    $port = 3306;
    $database = 'example';
    $username = 'root';
    $password = '';

    $dsn = "mysql:host=$host;port=$port;dbname=$database";
    $db = new PDO($dsn, $username, $password);
    $password = md5($password);

    $statement = $db->prepare("SELECT * FROM users WHERE email = ? or username = ? and password = ?");
    $statement->execute(array($email, $username, $password));

    while ($result = $statement->fetchObject()) {
        $sql = "SELECT count(*) FROM users WHERE email = ? or username = ? and password = ?";
        $result1 = $db->prepare($sql);
        $result1->execute(array($email, $username, $password));
        $number_of_rows = $result1->fetchColumn();
        if ($number_of_rows == 1)
        {

            $_SESSION['login'] = true;
            $_SESSION['uid'] = $result->uid;
            return TRUE;
        }
        else
        {
            return FALSE;
        }
    }
}

【问题讨论】:

    标签: php oop pdo


    【解决方案1】:
    1. 这个:

      WHERE email = ? or username = ? and password = ?
      

      ... 等于:

      WHERE email = ? or (username = ? and password = ?)
      

      ...由于operator precedence。这意味着如果您使用电子邮件地址进行验证,则无需提供有效密码即可登录。

    2. 确定用户是否存在后,您可以进行第二次查询以计算匹配用户的数量。数据库表首先应该不能保存重复的用户! usernameemail 列应定义为唯一索引。

    3. 如果while 在第一次迭代中将转到return,那么使用循环是没有意义的。它可能有效,但令人困惑。

    这就够了:

    $statement = $db->prepare('SELECT uid FROM users WHERE (email = ? or username = ?) and password = ?');
    $statement->execute(array($email, $username, $password));
    
    if ($result = $statement->fetchObject()) {
        $_SESSION['login'] = true;
        $_SESSION['uid'] = $result->uid;
        return TRUE;
    }else{
        return FALSE;
    }
    

    编辑:顺便说一句,您不应该以纯文本形式存储密码。无数网站被黑客入侵,密码被盗。谷歌加盐密码

    【讨论】:

      猜你喜欢
      • 2012-08-17
      • 2018-11-14
      • 1970-01-01
      • 1970-01-01
      • 2014-03-14
      • 1970-01-01
      • 2021-07-29
      • 2012-01-28
      • 2012-10-23
      相关资源
      最近更新 更多