我正在调整为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
的方法的返回值吗?
答案 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( ) ; }