【问题标题】:Check if PDO prepare(), execute() returns at least one row检查 PDO prepare(), execute() 是否返回至少一行
【发布时间】:2015-03-30 15:21:22
【问题描述】:

在迁移到 PDO 之前,我使用过

$result = mysqli_query ($conn, 'SELECT * FROM mytable WHERE id = 54');
if (mysqli_num_rows($result) >= 1) { ... }

检查查询是否返回至少一个结果

现在使用 PDO,我在许多 SO 问题(如 get number of rows with pdo)中看到 PDO 中没有直接函数来检查查询的行数(有关于使用 @ 的警告987654325@),而是像做一个额外的查询这样的解决方案:

SELECT count(*) FROM mytable WHERE id = 54

但这对于我想要的来说可能太多了:事实上,我不需要确切的行数,只要至少有一个就行。

如何检查准备好的语句查询是否返回至少一行?

$stmt = $db->prepare('SELECT * FROM mytable WHERE id = 54');
$stmt.execute();
... // HOW TO CHECK HERE?

【问题讨论】:

  • @Fred-ii- 为什么要计算列而不是行?我想它会起作用,但我不明白其中的原理......
  • 不能说。 PDO 有时会成为一种奇怪的动物,但我从来没有完全理解过为什么。
  • @basj 因为PDOStatement::rowCount() returns the number of rows affected by the last DELETE, INSERT, or UPDATE statement executed by the corresponding PDOStatement object. 而你的是SELECT

标签: php mysql pdo


【解决方案1】:
$stmt = $db->prepare('SELECT * FROM mytable WHERE id = 54');
$stmt.execute();
... // HOW TO CHECK HERE?

这很简单,你已经差不多了。

$stmt = $db->prepare('SELECT * FROM mytable WHERE id = 54');
$stmt.execute();
$result = $stmt->fetchAll();  // Even fetch() will do
if(count($result)>0)
{
      // at least 1 row
}

如果您只想要是/否答案,那么您还应该在查询中添加LIMIT 1,这样 mysql 就不会浪费尝试查找更多行。

【讨论】:

  • 谢谢!这也行得通:$stmt->execute(); $row = $stmt->fetch(); if ($row) { ... // at least 1 } ?
  • @Basj 会的,但是您将获取第一行,因此如果您想在任何时候进一步循环您的结果,则需要牢记这一点......
猜你喜欢
  • 2012-11-03
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 2021-05-17
  • 1970-01-01
  • 2012-07-08
  • 2021-05-14
相关资源
最近更新 更多