当失败时没有找到 AND 记录时(例如,当数据库访问出现问题时),PDO方法fetch()都会返回值FALSE
。
我需要能够区分这两种情况并以相应的方式处理每种情况:
所以,我的问题是:有没有办法以正确的方式处理结果?
感谢您的时间。
P.S。:当我没有找到任何记录时,我希望收到一个空数组,当出现错误时,我会收到值FALSE
。就像fetchAll()方法一样。
方法PdoStatement::fetch
会在失败时抛出异常,而不是FALSE
。我的回答证明了这种情况:
总之,正如@pucky124已经说过的那样,区分很容易实现:
PDOStatement::fetch
会返回FALSE
。 PDOStatement::fetch
会在失败时抛出异常。 答案 0 :(得分:2)
这是PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
的用途。像这样使用它:
$pdo = new PDO(
'mysql:host=localhost;port=3306;dbname=mydb;charset=utf8'
, 'user'
, 'pass'
, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ]
);
当以这种方式使用时,错误实际上会被抛出作为异常。这意味着如果fetch(或使用此pdo对象的其他方法)发生错误,将抛出异常并且该方法实际上根本不会返回。这是处理PDO中错误的一种非常有效的方法。现在你知道如果fetch返回一个值没有错误发生,因此如果它是false,那么查询没有返回任何记录。
答案 1 :(得分:0)
<?php
class Connect extends PDO
{
public function __construct()
{
parent::__construct("mysql:host=localhost;dbname=vicode", 'root', '',
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
$this->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}
}
?>