PHP PDO::FETCH_ASSOC 返回 false

标签 php pdo

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

相关文章:

php - 如何将 ids 与 mysql 中不同表中的名称匹配?

php - Foreach 嵌套在带有 PDO 查询的 while 循环中

php - 将 $result 更改为 MySQLi 或 PDO PHP

mysql - 1.6 中的重新索引错误(indexer.php 中的 PHP 异常)

PHP/MySQL 如何从 LEFT JOIN 中删除重复信息?

php - 如何强制 Composer 重新安装库?

php - 在php中找到正确的FFmpeg路径

php - 使用表单中的多个变量进行查询未按预期运行

php - Ajax请求并使用php pdo复制一些行但更改一些值

php 在我的时区获取日期