默认情况下, 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 为多个属性配置。
本篇完,还有疑问?留下评论吧