PDO fetchAll 返回空数组,但是可以显示count数量?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PDO fetchAll 返回空数组,但是可以显示count数量?相关的知识,希望对你有一定的参考价值。
如图
参考技术A这是正常效果,你可以这样简单理解:
count统计的是你有一个数组内容,所以数量为1。
但是这个数组是空的,所以var_dump打印出来的是空数组。
虽然是一个空数组,但它仍然是一个元素!
数据和计数分开获取,不要用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;
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数量?的主要内容,如果未能解决你的问题,请参考以下文章
MySQL PDO fetchAll 作为具有整数索引的数组