PDO 中没有行时返回值

Posted

技术标签:

【中文标题】PDO 中没有行时返回值【英文标题】:Value return when no rows in PDO 【发布时间】: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.net/manual/en/… 【参考方案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 这没有任何意义,所以不要理会这样的心血来潮:)

以上是关于PDO 中没有行时返回值的主要内容,如果未能解决你的问题,请参考以下文章

PHP,PDO 存储过程不返回任何值或未更改值

PDO + MySQL 总是返回字符串,但是 MsSQL 呢?

如何使用PDO从SET类型列返回多个值?

PHP PDO Select 查询返回双精度值

PHP-PDO:我如何将一些值返回到 javascript 中以在视图上呈现?

在 Oracle SQL 中查询不返回单行时更新