在此代码中,即使 $row>0,fetch(PDO::FETCH_ASSOC) 也会返回 false。
我找不到为什么会发生这种情况。
此处未设置 session ,因为 $member 为 null。
<?php
$sql = "SELECT * FROM members WHERE username=:decrypted_login and password=:decrypted_pass";
$result = $dbh->prepare($sql);
$result->bindParam(':decrypted_login', $decrypted_login);
$result->bindParam(':decrypted_pass', $decrypted_pass);
$result->execute();
$rows = $result->fetch(PDO::FETCH_NUM);
if($rows > 0)
{
$member = $result->fetch(PDO::FETCH_ASSOC);
session_regenerate_id();
$_SESSION['SESS_MEMBER_ID'] = $member['member_id'];
$_SESSION['SESS_PASSWORD'] = $member['password'];
$_SESSION['SESS_FIRST_NAME'] = $member['firstname'];
session_write_close();
}
?>
我阅读了很多 stackoverflow 问题和论坛,但找不到解决方案。
var_dump($row); // gives an array
var_dump($member) //shows bool(false).
最佳答案
您正在使用 fetch
而不是 rowCount
:
$rows = $result->rowCount();
来自PDO::fetch()
:
Fetches the next row from a result set.
The return value of this function on success depends on the fetch type. In all cases,
FALSE
is returned on failure.
我假设数据库中只能存在 1 个具有这些凭据的用户,当您第一次执行 $rows = $result->fetch(PDO::FETCH_NUM);
时,结果集光标移至下一个行集(该行集不存在,因为只有一行)。
因此,您会在稍后的调用中得到 false
。
关于PHP PDO::FETCH_ASSOC 返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24969204/