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.phprowCount
可能就是您要找的。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 - 检索结果和行数 - 便携式解决方案的主要内容,如果未能解决你的问题,请参考以下文章