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

**URL:** <https://www.shiqidu.com/t/topic/815>\
**Category:** 开发调优\
**Tags:** MySQL\
**Created:** [2024 年5 月 17 日 09:08 UTC](https://www.shiqidu.com/t/topic/815 "2024-05-17T09:08:06Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

作者： ![Leon](https://www.shiqidu.com/user_avatar/www.shiqidu.com/leon/32/5_2.png) [@Leon](https://www.shiqidu.com/u/Leon)\
发布日期： [2024 年5 月 17 日 09:08 UTC](https://www.shiqidu.com/t/topic/815/1 "2024-05-17T09:08:06Z")

</div>

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

 ![commit方法](https://discourse.shiqidu.com/uploads/default/original/1X/6a1c1275749e609464019ed608d9c93884534d10.jpeg)

及时pdo的errormode设置的是 `ERRMODE_EXCEPTION`

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

```

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

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

```

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

 ![query方法](https://discourse.shiqidu.com/uploads/default/original/1X/1216efa698074eb2198774e0fc1af3323b6ee7e0.jpeg)
