php pdo - 检索结果和行数 - 便携式解决方案

Posted

技术标签:

【中文标题】php pdo - 检索结果和行数 - 便携式解决方案【英文标题】:php pdo - retrieve results and row count - portable solution 【发布时间】:2016-04-05 15:58:17 【问题描述】:

我目前正在查询数据库两次以检索我的结果集的行数,以及在我对返回的行运行循环之前的结果集,如下所示:

$result = $db->query("SELECT COUNT(*) FROM mytable");
$result1 = $db->query("SELECT * FROM mytable");

$count = $result->fetchColumn();

if($count == $value)

while($row = $result1->fetch(PDO::FETCH_ASSOC))
//execute code
    
 elseif($count == $value2)  
//execute other code 

我刚刚转换为 PDO,所以也不知道。用于使用mysql_num_rows 的代码。我正在寻找一种无需两次查询数据库就可以做到这一点的方法,我一直在使用的这个解决方案用于小目的,但如果它被扩展,显然对数据库来说是不必要的负载。非常感谢

编辑:我转向 PDO 的原因是它的可移植性功能,因此 rowCount() 并不适合所有情况。

【问题讨论】:

阅读您使用的工具的文档总是一个好主意。例如,它会向您显示可用方法的列表。这里它向你展示了这个:php.net/manual/en/pdostatement.rowcount.php rowCount 可能就是您要找的。​​span> @Script47 rowCount 不会在 SELECT 语句上执行。 @Ohgodwhy 为什么我使用它时它工作得很好。 如果关联的 PDOStatement 执行的最后一条 SQL 语句是 SELECT 语句,则某些数据库可能会返回该语句返回的行数。 尽管它确实带有以下警告:但是,这不能保证所有数据库的行为,并且不应依赖于可移植应用程序。 但是,它确实对我有用。 rowCount() 在这种情况下使用 mysql 对我有用,但是鉴于文档中的警告,以及我转换为 PDO 的原因是它可以与大多数数据库一起移植,它是不是一个长期的解决方案。 【参考方案1】:

在您的情况下,没有理由执行 COUNT(*) 查询。您可以只计算返回了多少行。

$count = $result->fetchAll();

现在$count 持有返回多少行的引用。

【讨论】:

这个答案不起作用,而$result->rowCount(); 起作用。 @AdamCopley 我的解决方案对你不起作用怎么办? 勉强可以,但是您忽略了 Rajdeep Paul 提供的重要 count($result),因此是我的问题的第一个可行解决方案。谢谢你的回答,非常感谢。【参考方案2】:

您可以使用rowCount() 方法获取行数,如下所示:

$result = $db->query("SELECT * FROM mytable");
$count = $result->rowCount();

echo $count;

while($row = $result->fetch(PDO::FETCH_ASSOC))

    // your code


这是参考:

rowCount()

已编辑:

如果您不想使用rowCount() 方法,这是另一种方法。

$result = $db->query("SELECT * FROM mytable");
$result_set = $result->fetchAll();
$count = count($result_set);

echo $count;

while($row = array_shift($result_set))

    // your code


以下是相关参考资料:

fetchAll() count() array_shift()

【讨论】:

抱歉,这只是一个打字错误,而不是实际代码的复制/粘贴,并且没有回答我提出的问题。尽管如此,还是很好的观察,我现在已经编辑了。 需要注意的是,rowCount() 不保证适用于所有平台的 SELECT 查询!

以上是关于php pdo - 检索结果和行数 - 便携式解决方案的主要内容,如果未能解决你的问题,请参考以下文章

Java获得数据库查询结果的列数和行数,打印查询结果

PHP使用PDO进行事务处理

从表单中检索信息以进行 PDO 查询的问题

如何计算 MySQL 表中的行数(PHP PDO)

正确计算确切编号的方法。使用 PHP PDO 的 SQL 中的行数

批量查询HIVE所有表的大小和行数