Я работаю над формой входа в систему, используя PDO. Я использовал метод извлечения для возврата пользовательских данных из базы данных. А затем используйте метод 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;
}
}
Я ожидаю перейти на home.php, который я определил в условии if.
Для большинства баз данных 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;
}
}
rowCount()
работает с MYSQL. Попробуйте вместо этогоfetchColumn()
.