【问题标题】:php pdo - retrieve results and row count - portable solutionphp pdo - 检索结果和行数 - 便携式解决方案
【发布时间】: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 的原因是它可以与大多数数据库一起移植,它是不是一个长期的解决方案。

标签: php 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() 方法,这是另一种方法。

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

echo $count;

while($row = array_shift($result_set)){

    // your code

}

以下是相关参考资料:

【讨论】:

  • 抱歉,这只是一个打字错误,而不是实际代码的复制/粘贴,并且没有回答我提出的问题。尽管如此,还是很好的观察,我现在已经编辑了。
  • 需要注意的是,rowCount() 不保证适用于所有平台的 SELECT 查询!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-21
  • 2011-05-28
  • 2013-09-25
  • 2015-04-06
  • 1970-01-01
  • 2016-04-04
  • 1970-01-01
相关资源
最近更新 更多