PDO fetchAll 返回空数组,但是可以显示count数量?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PDO fetchAll 返回空数组,但是可以显示count数量?相关的知识,希望对你有一定的参考价值。

如图

参考技术A

这是正常效果,你可以这样简单理解:
count统计的是你有一个数组内容,所以数量为1。
但是这个数组是空的,所以var_dump打印出来的是空数组。
虽然是一个空数组,但它仍然是一个元素!

参考技术B

数据和计数分开获取,不要用count,count操作的对象非数组结果都为1,这是错误的。

示例代码如下:

$dbAdapter = new PDO("mysql:host=localhost;dbname=blog", "root", "root");   $dbAdapter->exec("SET NAMES 'utf8';");    
//数据部分
$data = $dbAdapter->query("
select * from user  
")->fetchAll(PDO::FETCH_ASSOC);    

//统计,计数部分
$ctsql = "select count(*)counts from user";
$count = $dbAdapter->query($ctsql)->fetch(PDO::FETCH_ASSOC);
$result = array(
'data'  => $data,
'count' => $count['counts']
);
print_r($result);exit;

参考技术C 楼上正确,另外补充:
fetchAll会释放查询结果集,至于为什么会显示count数量,是因为你使用了$checkaccountnum存储了结果集长度,解决该问题只需要跟以上操作一样,先使用一个变量继承fetchAll的结果,然后下方的count和dump都面向这个变量就行了。
参考技术D 你这个count不是统计的条数,而是统计的数组元素,虽然返回的数据是空的,但这个数组中有一个数据元素,只不过数组元素是空值而已。 第5个回答  2020-12-15 前边第3行你已经执行了fetchAll()了,
第5行再执行fetchAll(PDO::FETCH_ASSOC)就没有结果了,两个只能执行其中一个。本回答被提问者和网友采纳

布尔上的 PHP PDO fetchAll()

【中文标题】布尔上的 PHP PDO fetchAll()【英文标题】:PHP PDO fetchAll() on bool 【发布时间】:2019-08-07 17:46:23 【问题描述】:

我尝试编写自己的 PDO 包装类,我的语句总是返回 true,但我无法获取任何内容。

这是我的DB 课程

class DB 

private $db;
private $host = "localhost";
private $database = "test";
private $user = "test";
private $password ="test";

public function __construct()
    try 
        $this->db = new \PDO("mysql:host=" . $this->host . ";dbname=" . $this->database, $this->user, $this->password);
        $this->db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
     catch (\PDOException $error) 
        die("Verbindung zur Datenbank fehlgeschlagen: <br>" . $error);
    


public function run($sql, $args = [])
    try
        $stmt = $this->db->prepare($sql);
        $result = $stmt->execute($args);
        return $result;
     catch(\PDOException $error) 
        die("Fehler bei Datenbankabfrage: <br>". $error);
    


在这里我实例化了我的类的一个新实例并尝试获取数据

$DB = new DB();
$data = $DB->run("SELECT * FROM testtbl")->fetchAll();

如果没有 fetchAll(),它会返回 true,并且会在我的 error.log 中引发错误

PHP 致命错误:未捕获的错误:在布尔值上调用成员函数 fetchAll()

如果有人可以帮助我,那就太好了。

【问题讨论】:

【参考方案1】:

PDOStatement::execute 只返回一个布尔值,表示查询是否成功。你需要在语句上调用fetchAll,所以而不是

return $result;

你应该有

return $stmt;

【讨论】:

以上是关于PDO fetchAll 返回空数组,但是可以显示count数量?的主要内容,如果未能解决你的问题,请参考以下文章

PDO中获取结果集之fetchAll()方法详解

MySQL PDO fetchAll作为格式的数组

PDO fetchAll 数组到一维

MySQL PDO fetchAll 作为具有整数索引的数组

PDO fetchAll 将键值对分组到 assoc 数组中

PDO::fetchAll 与 PDO::fetch 循环