【问题标题】:Value return when no rows in PDOPDO 中没有行时返回值
【发布时间】:2013-09-03 00:39:30
【问题描述】:

我有一个 PDO 函数:

function(){
    $success=$this->query($query, $bindvalues);

    return ($success == true) ? $this->stmt->fetch(PDO::FETCH_ASSOC) : false;
}

当我执行返回一行(或更多)的选择查询时,它将返回例如:

array(1) { ["Id"]=> string(1) "1" }

当查询失败时(例如,如果我有错误的语法),它将返回 FALSE。

但如果查询中没有找到任何行,它也会返回 FALSE。

因此,查询中有错误且没有行的返回值都将返回 FALSE。这怎么可能?只有在查询中出现错误时我才需要返回 FALSE,例如当没有结果时我需要返回 NULL。我的功能有问题吗?

谢谢!

【问题讨论】:

标签: php mysql sql pdo return


【解决方案1】:

如果没有找到行 PDO::fetch 返回 false。这是事实。所以改变你的功能:

function(){
    $success = $this->query($query, $bindvalues);
    if(!$success) {
        //handle error
        return false;
    }
    $rows = $this->stmt->fetch(PDO::FETCH_ASSOC);
    return $rows ?: null;
}

【讨论】:

  • 非常感谢!这很简单,但我不知道 PDO 在没有找到行时返回 false。我认为 MySQL 没有?
  • mysql 也会返回 false。 mysql_fetch_array.
  • 好的,谢谢,但是当我不返回 $this->stmt->fetch(PDO::FETCH_ASSOC) 而是返回 $this->stmt->fetchAll(PDO::FETCH_ASSOC) 时,会返回一个空数组!
  • @Jordy 阅读该方法的手册! fetch 获取并返回下一行。有两种可能的返回值:下一行或“没有下一行”fetchAll 返回所有行的数组;这可能是一个空数组。这两种方法做的事情完全不同。
  • 你可以用return $rows ?: null;代替return $rows ? $rows : null;
【解决方案2】:

给你

function fetchRow($query, $bindvalues)
{
    $stmt = $this->query($query, $bindvalues);
    return $stmt->fetch();
}

【讨论】:

  • 他想在没有任何行时返回null,而不是false
  • @PhoneixS 这没有任何意义,所以不要理会这样的心血来潮:)
猜你喜欢
  • 2017-03-30
  • 2014-01-16
  • 2019-03-15
  • 1970-01-01
  • 1970-01-01
  • 2013-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多