PHP PDO rowCount 在 SELECT 语句上返回 -1
Posted
技术标签:
【中文标题】PHP PDO rowCount 在 SELECT 语句上返回 -1【英文标题】:PHP PDO rowCount returns -1 on SELECT statement 【发布时间】:2015-04-08 21:40:46 【问题描述】:我有一个奇怪的问题,一整天都在折磨我。
我有以下代码:
$today = date("m/d/Y");
$sql = "SELECT * FROM msgs WHERE is_errata = 0 AND kill_date >= '$today' AND msg_date <= '$today' ORDER BY msg_date";
$ps = $pdo->prepare($sql);
if (!$ps)
echo "PDO::errorInfo():";
print_r($pdo->errorInfo());
else
$ps->execute();
$number_of_rows = $ps->rowCount();
当我显示 $number_of_rows 的值时,它总是显示 -1,即使我得到结果。
其他人有这个问题吗?
哦,我使用的数据库不是 mysql,而是可爱的 MS Access。我怀疑这可能是问题所在。
【问题讨论】:
【参考方案1】:rowCount()
方法不会从SELECT
语句返回行数。这是常见的错误。
PDOStatement::rowCount() 返回受 相应的最后执行的 DELETE、INSERT 或 UPDATE 语句 PDOStatement 对象。 如果关联的 PDOStatement 执行的最后一条 SQL 语句是 SELECT 语句,某些数据库可能会返回行数 由该语句返回。但是,不能保证这种行为 适用于所有数据库,不应依赖于便携式 应用程序。
您可以在documentation 中找到更多详细信息。
因此,要获取行数,您必须使用 sql COUNT(*)
函数编写 SELECT
语句。在你的情况下:
$sql = "SELECT COUNT(*) AS `count` FROM msgs WHERE is_errata = 0 AND kill_date >= '$today' AND msg_date <= '$today' ORDER BY msg_date";
或使用 php:
$number_of_rows = count($ps->fetchAll());
您还应该学习以正确的方式准备查询
【讨论】:
在此之后我无法使用“foreach”进行迭代。有什么解决办法吗?【参考方案2】:您应该使用iterator_count
来计算行数,即
$number_of_rows = iterator_count($ps);
【讨论】:
以上是关于PHP PDO rowCount 在 SELECT 语句上返回 -1的主要内容,如果未能解决你的问题,请参考以下文章