踩坑,PDO的commit方法就算数据库down了也不会返回false。

如题,不要依赖这个commit()方法的返回值,测试发现在commit执行前把mysql关闭,此函数还是会返回true,只是脚本会抛出一个warning级别的警告信息。

及时pdo的errormode设置的是 ERRMODE_EXCEPTION

$options = [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES => false,
];

如果想知道commit是否执行成功,请使用query方法执行commit语句。

return $pdo->query("commit");

query方法在遇到MySQL down机的时候会抛出error级别的错误。