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 中没有行时返回值的主要内容,如果未能解决你的问题,请参考以下文章
PDO + MySQL 总是返回字符串,但是 MsSQL 呢?