【问题标题】:Undefined property: PDOStatement::$rows未定义的属性:PDOStatement::$rows
【发布时间】:2016-02-01 03:58:30
【问题描述】:

我不知道为什么这段代码:

if($sth->rows == 0){
    echo "Incorrect username or password - 1";
}

正在提取错误未定义属性:PDOStatement::$rows。这在我基本上只更改了几件事的不同 PHP 脚本上工作得很好。然而,我也收到回显“不正确的用户名或密码 -1”,这意味着 if 语句确实运行了。

这是完整的 PHP 代码。

<?php
$lusername = $_POST['username'];
$lpassword = $_POST['password'];

//Hashing password
$cost = 10;

$salt = strtr(base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM)), '+', '.');

$salt = sprintf("$2a$%02d$", $cost) . $salt;

$hash = crypt($lpassword, $salt);

// Create connection
$dsn = 'mysql:dbname=weblupne_template3;host=localhost';
$username = 'somethingFreakingCrazyMagical';
$password = 'somethingEvenMoreCrazyFreakingMagical';
try {
    $db = new PDO($dsn, $username, $password); // also allows an extra parameter of configuration
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // set the PDO error mode to exception
} catch(PDOException $e) {
    die('Could not connect to the database:<br/>' . $e);
}

//Where to select from
$sth = $db->prepare('SELECT password FROM login WHERE username = :username LIMIT 1');
$sth->bindParam(':username', $lusername);
$sth->execute();
$user = $sth->fetch(PDO::FETCH_OBJ);

if($sth->rows == 0){
    echo "Incorrect username or password - 1";
}
else{
    //Tests if correct
    echo $user->hash;
    if ( hash_equals($user->password, crypt($lpassword, $user->password)) ) {
        echo "You check out";
    }
    else{
        echo "Incorrect username or password - 2";
    }
}
?>

【问题讨论】:

  • 可能是查询执行失败了,你不检查,你就假设吧。
  • 我将执行部分放在try and catch语句中,没有收到异常。
  • 没有你的连接是在 try\catch 不是选择查询
  • 是的,我理解,但我是说我只是尝试将所有内容都放在 try catch 语句中并收到相同的反馈
  • 好的,抱歉,没有想法。

标签: php pdo mysql-error-1064


【解决方案1】:

你必须使用$sth-&gt;rowCount(),没有名为rows的属性。

【讨论】:

  • 这工作完美无缺。我对为什么 ->row 在我的其他 php 页面上工作感到困惑。
猜你喜欢
  • 1970-01-01
  • 2018-08-19
  • 2014-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多