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

发布网友 发布时间:2022-04-21 15:29

我来回答

5个回答

热心网友 时间:2023-11-14 13:05

当使用PDO的fetchAll方法返回一个空数组,但是却能够正确显示count数量时,可能有以下几种可能的原因:
查询结果确实为空:
首先需要确认查询语句是否正确,并且数据库中是否存在符合查询条件的数据。可以通过在数据库客户端中手动执行相同的查询语句来验证结果。
数据库连接错误:
如果数据库连接出现问题,可能导致查询结果为空。可以通过检查数据库连接参数、用户名和密码是否正确,并且确认数据库是否可用来解决该问题。
查询结果被提前读取:
在使用PDO执行查询后,如果在调用fetchAll之前已经使用了其他的fetch方法(如fetch或fetchColumn),那么结果集可能已经被提前读取完毕,导致之后的fetchAll返回空数组。为了解决这个问题,可以在执行查询之前先调用closeCursor方法来关闭结果集,然后再重新执行查询。
fetchMode设置不正确:
PDO提供了不同的fetchMode选项,用于指定查询结果的返回格式。如果fetchMode设置不正确,也可能导致fetchAll返回空数组。可以尝试使用不同的fetchMode选项,或者将其设置为PDO::FETCH_ASSOC,以确保返回关联数组形式的结果。
错误处理设置不正确:
PDO默认情况下会将错误模式设置为PDO::ERRMODE_SILENT,即不会抛出任何异常。这可能导致fetchAll在执行查询时发生了错误,但是没有得到有效的反馈信息。可以将PDO的错误模式设置为PDO::ERRMODE_EXCEPTION,以便在查询出错时抛出异常,从而更容易发现问题所在。
以上是一些可能导致fetchAll返回空数组的常见原因。建议逐一排查这些可能性,并根据具体情况采取相应的解决措施。如果问题仍然存在,可以考虑提供更多的代码和错误信息,以便更好地分析和解决问题。

热心网友 时间:2023-11-14 13:06

你这个count不是统计的条数,而是统计的数组元素,虽然返回的数据是空的,但这个数组中有一个数据元素,只不过数组元素是空值而已。

热心网友 时间:2023-11-14 13:06

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

热心网友 时间:2023-11-14 13:07

数据和计数分开获取,不要用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;

热心网友 时间:2023-11-14 13:07

楼上正确,另外补充:
fetchAll会释放查询结果集,至于为什么会显示count数量,是因为你使用了$checkaccountnum存储了结果集长度,解决该问题只需要跟以上操作一样,先使用一个变量继承fetchAll的结果,然后下方的count和mp都面向这个变量就行了。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com