在此代码中,即使$row>0, fetch(PDO::FETCH_ASSOC)也返回false。
我不知道为什么会这样。
如果$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();
From PDO::fetch()
:
从结果集中获取下一行。
此函数成功时的返回值取决于获取操作类型。在所有情况下,失败返回
FALSE
。
我在这里假设数据库中只有一个用户可以使用这些凭据,当您第一次执行$rows = $result->fetch(PDO::FETCH_NUM);
时,结果集游标移动到下一个行集(不存在,因为只有一行)。
因此,您在后面的呼叫中获得false
。