我正在使用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。
答案 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;
}
}