PDO方法是否会失败并且不会抛出PDOException?

时间:2016-05-26 10:53:39

标签: php mysql pdo

我正在调整为PHP / 5.2编写的遗留数据库类,该类旨在连接到MySQL并隐藏所有错误。我已经将PDO实例配置为抛出异常:

 new PDO($dsn, $user, $pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION))

现在我需要相应地调整我的代码,以处理函数可能会抛出异常的情况,因此我会转到手册。

在某些情况下,手册是明确的,例如PDO::prepare

  

如果数据库服务器成功准备了语句,   PDO::prepare()返回PDOStatement个对象。如果是数据库服务器   无法成功准备语句,PDO::prepare() 返回   FALSE或发出PDOException(取决于错误处理)

在其他情况下,它有点模糊,例如PDO::commit

  

成功时返回TRUE或失败时返回FALSE
引发PDOException   如果没有活动交易。

(由于某些其他原因可以失败,只需返回false吗?)

有些情况甚至没有提及例外情况,例如: PDO::bindValue

  

成功时返回TRUE或失败时返回FALSE

...尽管很明显可以确认它确实会导致PDOException出错(至少在某些错误上)。

当手册没有说明时,我还需要检查返回false的方法的返回值吗?

3 个答案:

答案 0 :(得分:3)

不,当你设置PDO::ERRMODE_EXCEPTION时,任何错误都会有异常

答案 1 :(得分:0)

当您启用了异常且代码中发生错误时,代码会直接停止从该函数执行,因此它不会返回任何内容。

首先,你不需要检查返回值,但如果你不能解决任何具体的错误,你就会完全依赖PDO来正确地发现错误。

当我创建我的数据库系统时,如果我看到即将发生的错误,我会利用这两个系统,而不是自己抛出它。例如,$pdo->prepare('')非常有效,但在绑定时会出错。

然后还有其他函数,例如fetch如果数据库中没有结果就不会出错,而不检查结果会是愚蠢的。

现在提交失败,我认为有一种情况会导致它返回false而不抛出异常,这是在连接到数据库之后和调用PDO::commit之前连接到服务器的时候,很高兴知道你是否有一个远程数据库服务器。

所以要回答你的问题,它可以在不抛出异常的情况下失败,但如果你有一个本地数据库,它的时间必须是非常特定的。

答案 2 :(得分:-5)

试试这个

 try {
   $db = new PDO("mysql:host=localhost;dbname=dbname", "username", "password");
}catch( PDOException $Exception ) {  $Exception->getMessage( )  ;  }