行计数方法未返回受影响的行,这在我的代码中有什么问题?

时间:2019-04-21 09:41:24

标签: php mysql

我正在使用PDO处理登录表单。我已经使用fetch方法从数据库返回用户数据。然后使用rowCount方法对受影响的行进行计数并将其存储在count变量中。但是count变量仍然保持为零,并跳转到我的代码的其他部分。

这是登录功能



public function login($email, $password){
    $password1 = md5($password);
    $stmt = $this->pdo->prepare("SELECT 'user_id' FROM 'users' WHERE 'email' = 
    :email AND 'password' = :password");

    $stmt->bindparam(":email", $email, PDO::PARAM_STR);
    $stmt->bindparam(":password", $password1, PDO::PARAM_STR);
    $stmt->execute();

    $user = $stmt->fetch(PDO::FETCH_OBJ);
    $count = $stmt->rowCount();

    if ($count > 0) {
    $_SESSION['user_id'] = $user->user_id;
    header('Location: home.php');
    }else{
    return false;
    }
}

我希望转到if语句中定义的home.php。

1 个答案:

答案 0 :(得分:0)

对于大多数数据库,PDOStatement::rowCount()不会返回受SELECT语句影响的行数。而是使用PDO::query()发出与预期的SELECT语句相同的谓词的SELECT COUNT(*)语句,然后使用PDOStatement::fetchColumn()检索将返回的行数。您的应用程序然后可以执行正确的操作

public function login($email, $password){
$password1 = md5($password);
$stmt = $this->pdo->prepare("SELECT 'user_id' FROM 'users' WHERE 'email' = 
:email AND 'password' = :password");

$stmt->bindparam(":email", $email, PDO::PARAM_STR);
$stmt->bindparam(":password", $password1, PDO::PARAM_STR);
$stmt->execute();

$user = $stmt->fetch(PDO::FETCH_OBJ);
$count = $stmt->fetchColumn();//change here

if ($count > 0) {
$_SESSION['user_id'] = $user->user_id;
header('Location: home.php');
}else{
return false;
 }
}