PHP PDO :: FETCH_ASSOC返回false

时间:2014-07-26 08:43:01

标签: php pdo fetch

在此代码中,即使$ 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).  

1 个答案:

答案 0 :(得分:1)

您使用fetch代替rowCount

$rows = $result->rowCount();

来自PDO::fetch()

  

从结果集中获取下一行。

     

此函数的成功返回值取决于获取   类型。在所有情况下,失败时都会返回 FALSE

我假设数据库中只有1个用户可以使用这些凭据,当您第一次执行$rows = $result->fetch(PDO::FETCH_NUM);时,结果集游标将移动到下一个行集(不存在) ,因为只有一行)。

因此,您在稍后的通话中获得false