所以我一直在使用PHP的PDO作为我的数据库goto类,不幸的是今天在客户端服务器上调试了一段时间后(安装了PHP 5.2.6)我发现了这一点.我们尝试升级到最新的稳定版本(5.2.9),但问题仍然存在.
有没有人找到解决方法?
Wez*_*ong 10
数据库可以计算行数的唯一方法是运行查询并计算行数.
默认情况下,mysql扩展使用缓冲查询模式,导致整个数据集在控制返回到PHP之前被提取到内存中,并且可以开始处理行.
默认情况下,PDO使用无缓冲模式,这会导致页面加载时间延迟降低,这通常是您想要的.权衡是rowCount()在获取整个数据集之前不会返回有效信息.
那你怎么算这个数呢?
简单:
$q = $db->query("SELECT ...");
$rows = $q->fetchAll();
$rowCount = count($rows);
echo "There are $rowCount rows\n";
foreach ($rows as $row) {
print_r($row);
}
Run Code Online (Sandbox Code Playgroud)
但这很糟糕,因为它查询前面的所有行并使我的页面加载速度变慢,旧的mysql扩展没有这个问题!?
但这正是旧的mysql扩展实际上正在做的事情; 这是实现这一目标的唯一途径.
您可以通过使用该FOUND_ROWS()函数来完成MySQL本身,不确定是否有更好的替代方案.
编辑:似乎这是MySQL可能的唯一原因是因为它在内部获取所有结果行并缓冲它们,以便能够为您提供此信息.见mysql_unbuffered_query().如果您使用该功能而不是mysql_query(),该mysql_num_rows()功能将无法使用.如果您确实需要在使用PDO时知道行数,可以将PDO中的所有行提取到数组中然后使用count().
| 归档时间: |
|
| 查看次数: |
10539 次 |
| 最近记录: |