PHP PDO 等效于 mysql_num_rows [重复]

Posted

技术标签:

【中文标题】PHP PDO 等效于 mysql_num_rows [重复]【英文标题】:PHP PDO equivalent to mysql_num_rows [duplicate] 【发布时间】:2014-01-20 06:25:44 【问题描述】:

我正在使用此 PDO 查询从数据库中进行选择:

$stmt = $pdo_conn->prepare("select * from tickets where ticketnumber = :seq ");
$stmt->execute(array(':seq' => $_GET["seq"]));
$ticket = $stmt->fetch();

但我无法获得等同于mysql_num_rows

我已经尝试过:

$stmt = $pdo_conn->prepare("select COUNT(*), * from tickets where ticketnumber = :seq ");
$stmt->execute(array(':seq' => $_GET["seq"]));
$ticket = $stmt->fetch();
$num_rows = $stmt->fetchColumn();
echo $num_rows;

【问题讨论】:

@sjagr 最好不要发布这个。它已经过时了,所有答案都是错误的。 【参考方案1】:

你有没有看说明书?

http://us1.php.net/mysql_num_rows

警告 此扩展自 PHP 5.5.0 起已弃用,并将在未来删除。相反,应该使用 MySQLi 或 PDO_MySQL 扩展。另请参阅 MySQL:选择 API 指南和相关的常见问题解答以获取更多信息。此功能的替代方案包括: mysqli_stmt_num_rows() PDOStatement::rowCount()

http://us1.php.net/manual/en/pdostatement.rowcount.php

请参阅:示例 #2 计算 SELECT 语句返回的行数

使用您的代码将是:

select COUNT(*) from tickets where ticketnumber = :seq 

您不能同时选择计数和 *。该示例显示您选择计数,然后尝试选择您的行。

【讨论】:

据我所知,这个特定用户坚决拒绝进行任何手动或谷歌查找。 不知道为什么这个或其他答案被否决了,也许 OP 很生气? @Jessica:可能是因为你建议他们通读一页又一页的手册,而不是仅仅为他们编写代码。【参考方案2】:

首先,您需要执行 2 个单独的查询来获取行数,因为您不能在同一查询中执行 COUNT()*

因此您可以使用以下方法获取行数:

$stmt = $pdo_conn->prepare("select * from tickets where ticketnumber = :seq ");
$stmt->execute(array(':seq' => $_GET["seq"]));
$ticket = $stmt->fetch();

echo 'Rows: '.$stmt -> rowCount();

更多信息可以在手册中找到:PDOStatement::rowCount

【讨论】:

为什么投反对票?这是正确的答案。 当 PDO 连接的数据库是 MySQL 时,这确实有效。它将为您提供结果中的实际行数。尽管 PHP 手册说它不适用于 MySQL 以外的大多数数据库。甚至在 MySQL 中,它也确实 not 像 MySQL 的 FOUND_ROWS() 函数那样运行,它允许您找出如果您没有使用 LIMIT 子句会获得多少行。 dev.mysql.com/doc/refman/5.7/en/…

以上是关于PHP PDO 等效于 mysql_num_rows [重复]的主要内容,如果未能解决你的问题,请参考以下文章

php中mysql_num_rows与count(*)的效率对比

如何在 PHP PDO 中使用 UDF

PHP mysql_num_rows() 函数 返回结果集中行的数目。

PHP中关于PDO数据访问抽象层的功能操作

PHP等效于JavaScript getTime() [重复]

Javascript 等效于 PHP 的 list()