在 php 中使用 PDO 类获取 num_rows 时出现问题
我刚刚更改了数据库连接。我还不习惯 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
获取行数
I have just changed my database connection. I am not used to the PDO class or OOP yet. Anyway, I connect to the db like this:
$dsn = "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME;
try
{
$this->db = new PDO($dsn, DB_USER, DB_PASS);
}
catch ( Exception $e )
{
die ( $e->getMessage() );
}
I am trying to get number of rows from this query:
$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() );
}
In phpmyadmin
I get a result so my query is correct, but $n
is NULL
for some reason.. How do I get number of rows with PDO
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
$stmt
的类型为PDOStatement
。该类没有 num_rows 属性。您可能正在寻找
rowCount
,但该文件指出:总而言之,如果您想实际
SELECT
所有数据,您可以通过迭代结果集可靠地确定返回了多少行(或者只调用fetchAll
并计算数组中的项目)。如果您不需要数据而只需要数字,请改用SELECT COUNT
。因此,要在不更改查询的情况下计算行数:
$stmt
is of typePDOStatement
. That class has nonum_rows
property.You might be looking for
rowCount
instead, but the documentation for that states:The long and the short if it is that, if you want to actually
SELECT
all that data, you can reliably determine how many rows were returned by iterating over the result set (or just callfetchAll
and count the items in the array). If you don't need the data but just a number, useSELECT COUNT
instead.So, to count the rows without changing the query: