当前位置: 首页 > 未分类>阅读正文

pdo设置错误模式

2022.8.6 朱丰华 473 次 留下评论 1106字

默认情况下, pdo 没有错误提示,也就是假设无法连接,或sql错误,没有提示。

必须获取 errCode 和 errInfo 才可以知道是否遇到问题。

var_dump($pdo->errorInfo());

var_dump($pdo->errorCode());

创建 pdo 实例时,可能有错误, prepare 时,可能有错误, execute 时,也可能有错误。

设置为警告

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$pdo->query('select * from aabbcc');
// Warning: PDO::query(): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'blog_test.aabbcc' doesn't exist

在设置错误处理机制为警告后,PDO 会抛出一个不影响程序执行的 warning 信息。但是,如果我们修改了 ini 文件中错误处理机制后,也可能是看不到警告信息的。不过相对于默认处理的情况来说,有一条警告信息已经非常好了。

设置为异常

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->query('select * from aabbcc');
// Fatal error: Uncaught PDOException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'blog_test.aabbcc' doesn't exist 

最后,我们将错误处理机制设置为抛出异常。总算是能让程序中止运行并且报出 Fatal error 错误了,同时,这个异常信息也是可以通过 try…catch 来捕获到的。这样的开发才是我们最需要的开发形式。

实例化 pdo 时指定错误模式:

$pdo = new PDO('mysql:host=127.0.0.1;port=3306;dbname=blog_test', 'root', '', [PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING]);
$pdo->query('select * from aabbcc');
// Warning: PDO::query(): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'blog_test.aabbcc' doesn't exist

实例化对象的几个参数,分别是:$dsn , $user, $pwd , $config。 其中 config 为多个属性配置。

本篇完,还有疑问?留下评论吧

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注