Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PDO的rowCount()不适用于PHP5.2.6+_Php_Pdo - Fatal编程技术网

PDO的rowCount()不适用于PHP5.2.6+

PDO的rowCount()不适用于PHP5.2.6+,php,pdo,Php,Pdo,因此,我已经使用PHP的PDO作为我的数据库goto类有一段时间了,不幸的是,今天在安装了PHP5.2.6的客户端服务器上调试了一段时间后,我发现。我们尝试升级到最新的稳定版本5.2.9,但问题仍然存在 有人找到解决办法了吗?您可以通过MySQL本身使用,但不确定是否有更好的替代方案 编辑:看起来MySQL之所以能够做到这一点,是因为它在内部获取了所有结果行并对它们进行了缓冲,以便能够向您提供这些信息。看见如果使用该函数而不是mysql\u查询,mysql\u num\u rows函数将无法工作

因此,我已经使用PHP的PDO作为我的数据库goto类有一段时间了,不幸的是,今天在安装了PHP5.2.6的客户端服务器上调试了一段时间后,我发现。我们尝试升级到最新的稳定版本5.2.9,但问题仍然存在


有人找到解决办法了吗?

您可以通过MySQL本身使用,但不确定是否有更好的替代方案


编辑:看起来MySQL之所以能够做到这一点,是因为它在内部获取了所有结果行并对它们进行了缓冲,以便能够向您提供这些信息。看见如果使用该函数而不是mysql\u查询,mysql\u num\u rows函数将无法工作。如果在使用PDO时确实需要知道行数,则可以将PDO中的所有行提取到一个数组中,然后使用count。

注意,在SELECT查询中不应使用ROWCUNT,因为PDOStatement->ROWCUNT会返回受上次删除、插入、,或由相应PDOStatement对象执行的UPDATE语句


相反,您可以使用fetchAll进入数组,然后进行计数。

数据库为您提供行数计数的唯一方法是运行查询并计算行数

默认情况下,mysql扩展使用缓冲查询模式,在将控件返回到PHP并开始处理行之前,将整个数据集提取到内存中

PDO默认使用无缓冲模式,这会降低页面加载时间的延迟,这通常是您想要的。取舍是,在获取整个数据集之前,rowCount不会返回有效信息

那你是怎么计算的呢

简单:

但这很糟糕,因为它会查询前面的所有行,使我的页面加载速度变慢,旧的mysql扩展没有这个问题


但这正是旧的mysql扩展在幕后实际做的事情;这是获得该计数的唯一方法。

我不确定您要查找的是什么,您正在调用受影响的行,并为select语句返回零?select不会影响任何行。我正在寻找一个与去年mysql_num_row相同的PDO,您是如何解决的?+1即使是mysql C API也无法告诉您行数,在获取所有行之前。rowCount仅在返回结果后运行,因此我相信它们已经被获取。我在从PDO获取所有行后尝试了计数,但仍然不起作用!上述解决方案似乎都不适用于meI,因为meI遇到了同样的问题,并用fetchAll“解决”了。。。计数技巧。我正在处理一个应用程序,希望依赖rowCount,但不确定为什么它不可信。我正要发布一个问题,但你的回答完全涵盖了这个问题+先生,祝你好运
$q = $db->query("SELECT ...");
$rows = $q->fetchAll();
$rowCount = count($rows);
echo "There are $rowCount rows\n";
foreach ($rows as $row) {
    print_r($row);
}