PDO中没有行时返回值

Jor*_*rdy 9 php mysql sql pdo return

我有一个PDO功能:

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

    return ($success == true) ? $this->stmt->fetch(PDO::FETCH_ASSOC) : false;
}
Run Code Online (Sandbox Code Playgroud)

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

array(1) { ["Id"]=> string(1) "1" }
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢!

Tob*_*lbs 14

如果没有找到行,则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;
}
Run Code Online (Sandbox Code Playgroud)

  • @Jordy阅读该方法的手册!`fetch`获取并返回*下一行*.有两种可能的返回值:下一行或*"没有下一行"*.`fetchAll`返回所有行的数组; 可行的可以是一个空数组.这两种方法完全不同. (2认同)