在 php 中使用 PDO 类获取 num_rows 的问题
Posted
技术标签:
【中文标题】在 php 中使用 PDO 类获取 num_rows 的问题【英文标题】:problem getting num_rows with PDO class in php 【发布时间】:2011-07-30 05:12:42 【问题描述】:我刚刚更改了我的数据库连接。我还不习惯 PDO 类或 OOP。无论如何,我像这样连接到数据库:
$dsn = "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME;
try
$this->db = new PDO($dsn, DB_USER, DB_PASS);
catch ( Exception $e )
die ( $e->getMessage() );
我正在尝试从此查询中获取行数:
$ip = $this->ip();
$sql = "SELECT `id` FROM `login_failed`
WHERE `ip` = :ip AND `time` BETWEEN NOW( ) - INTERVAL 120 MINUTE AND NOW( )
LIMIT 3";
try
$stmt = $this->db->prepare($sql);
$stmt->bindParam(':ip', $ip, PDO::PARAM_STR);
$result = $stmt->execute(); // $result = true
$n = $stmt->num_rows ; // n = NULL?
$stmt->closeCursor();
catch (Exception $e)
die ($e->getMessage() );
在phpmyadmin
中,我得到一个结果,所以我的查询是正确的,但由于某种原因,$n
是NULL
。我如何使用PDO
获取行数
【问题讨论】:
【参考方案1】:$stmt
的类型为 PDOStatement
。该类没有num_rows
属性。
您可能正在寻找 rowCount
,但相关文档指出:
如果执行的最后一条 SQL 语句由 相关的 PDOStatement 是 SELECT 语句,某些数据库可能 返回由返回的行数 那句话。然而,这 不能保证所有人的行为 数据库,不应依赖 用于便携式应用程序。
如果是这样的长短,如果你想实际SELECT
所有这些数据,你可以可靠地确定通过迭代结果集返回了多少行(或者只是调用fetchAll
并计算数组中的项目)。如果您不需要数据而只需要一个数字,请改用SELECT COUNT
。
所以,在不改变查询的情况下计算行数:
$result = $stmt->execute();
$rows = $stmt->fetchAll(); // assuming $result == true
$n = count($rows);
【讨论】:
+1 比我快,同时还设法包含 rowCount 免责声明。 @Charles:给猫剥皮的方法只有这么多……非常类似的反应。只要有纪律,只要有机会,我都会给你投票 :)以上是关于在 php 中使用 PDO 类获取 num_rows 的问题的主要内容,如果未能解决你的问题,请参考以下文章
在 PHP 中,是不是可以使用 PDO 获取一维数组? [复制]
在 PHP 中,当将 PDO 与 pgSQL 一起使用时,如何在原始 INSERT sql 查询中获取“RETURNING”子句的值