gpt4 book ai didi

php - 我的代码中有什么问题,行计数方法没有返回受影响的行?

转载 作者:行者123 更新时间:2023-11-29 16:05:31 24 4
gpt4 key购买 nike

我正在使用 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。

最佳答案

对于大多数数据库,PDOStatement::rowCount() 不会返回受 SELECT 语句影响的行数。相反,请使用 PDO::query() 发出 SELECT COUNT(*) 语句,其谓词与您想要的 SELECT 语句相同,然后使用 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;
}
}

关于php - 我的代码中有什么问题,行计数方法没有返回受影响的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55781607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com