有很多相互矛盾的说法。在PHP中使用PDO获得行数的最佳方法是什么?在使用PDO之前,我只是简单地使用了mysql_num_rows。
fetchAll是我不想要的东西,因为我有时可能要处理大型数据集,所以不适合我使用。
你有什么建议吗?
有很多相互矛盾的说法。在PHP中使用PDO获得行数的最佳方法是什么?在使用PDO之前,我只是简单地使用了mysql_num_rows。
fetchAll是我不想要的东西,因为我有时可能要处理大型数据集,所以不适合我使用。
你有什么建议吗?
当前回答
当它是mysql的问题,如何计算或获得多少行在一个表与PHP PDO我使用这个
// count total number of rows
$query = "SELECT COUNT(*) as total_rows FROM sometable";
$stmt = $con->prepare($query);
// execute query
$stmt->execute();
// get total rows
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$total_rows = $row['total_rows'];
感谢Mike @ codeofaninja.com
其他回答
快速一行程序返回第一个条目。这对于非常基本的查询是很好的。
<?php
$count = current($db->query("select count(*) from table")->fetch());
?>
参考
最后我用了这个:
$result = $db->query($query)->fetchAll();
if (count($result) > 0) {
foreach ($result as $row) {
echo $row['blah'] . '<br />';
}
} else {
echo "<p>Nothing matched your query.</p>";
}
回答这个问题是因为我现在知道了这个问题,也许它会有用。
请记住,您不能获取两次结果。您必须将获取结果保存到数组中,按count($array)获取行计数,并使用foreach输出结果。 例如:
$query = "your_query_here";
$STH = $DBH->prepare($query);
$STH->execute();
$rows = $STH->fetchAll();
//all your results is in $rows array
$STH->setFetchMode(PDO::FETCH_ASSOC);
if (count($rows) > 0) {
foreach ($rows as $row) {
//output your rows
}
}
看看这个链接: http://php.net/manual/en/pdostatement.rowcount.php 不建议在SELECT语句中使用rowCount() !
这是一个老帖子,但正在沮丧地寻找替代方案。非常不幸的是,PDO缺少这个特性,特别是PHP和MySQL往往是齐头并进的。
使用fetchColumn()有一个不幸的缺陷,因为当fetchColumn()将指针移动到下一行时,您不能再使用该结果集(有效地)。举个例子,如果你有一个类似于
水果- - - >香蕉 水果——>苹果 水果- - - >橙色
如果你使用fetchColumn(),你可以发现有3个水果返回,但如果你现在循环的结果,你只有两列,fetchColumn()的价格是损失的第一列结果,只是找出多少行被返回。这会导致草率的编码,如果实现的话,结果会完全错误。
所以现在,使用fetchColumn(),你必须实现一个全新的调用和MySQL查询,只是为了得到一个新的工作结果集。(希望自你上次提问以来没有改变),我知道,不太可能,但这是可能发生的。此外,所有行数验证上的双重查询的开销。对于这个例子来说,这是很小的,但是在一个连接查询上解析200万行,这不是一个令人愉快的代价。
我热爱PHP,支持每一个参与PHP开发的人,以及日常使用PHP的社区,但真的希望在未来的版本中能够解决这个问题。这是我对PHP PDO“真正”唯一的不满,否则它是一个伟大的类。