根据xPDO Getting Started guide中的示例,$modx
在此上下文中似乎是一个扩展类PDO
,结果资源对象$myquery
可能是一个PDOStatement
对象。
$modx
因此,您可以像使用普通 PDO 对象一样设置异常错误模式。
$modx->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
强制它在失败时抛出错误。默认情况下,PDO 错误是静默的;它的错误模式记录在这里。
更正: 查看 xPDO 源,它没有扩展 PDO
,而是包含一个PDO
对象作为属性并实现 PDO 方法,将它们传递给它的连接属性。所以setAttribute()
调用将被传递到底层PDO
对象并且应该相应地工作。
xPDO 构造函数稍微扩展了普通 PDO 构造函数的功能,并在第 5 个参数中接受一组选项,您可以在其中设置错误模式,而不是稍后通过以下方式设置setAttribute()
:
$xpdo = new xPDO($dsn, $user, $password, [], [PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION]);
无论您选择设置它的哪种方法,您都可以将代码包装在一个try/catch
块中以捕获错误类型PDOException
的异常:
try {
$insert = "some insert sql statement that will fail";
$myquery = $modx->query($insert);
}
catch (PDOException $e) {
echo 'error occurred! ' . $e->getMessage() . '<br>';
}
您也可以更简单地将错误模式设置为PDO::ERRMODE_WARNING
,PHP 将改为只发出E_WARNING
消息,与异常不同,这些消息是非致命的。
通过使用 xPDO 设置快速测试,我能够验证所有这些工作是否符合预期。