PDO不会抛出异常

时间:2018-05-22 14:39:39

标签: php exception pdo slim-3

我知道这个问题已经存在很多次,但没有答案适合我。

我的PDO不会抛出任何错误......或者在我面前发现错误。

我对php很新,我不想理解简单的事情。

这是我的初始化代码

$pdo = new PDO("mysql:host=" . $db['host'] . ";dbname=" . $db['dbname'], $db['user'], $db['pass']);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

以及我在例如插入具有unicity约束的重复行(但对于未知行或任何pdo异常的相同问题......)的示例

    $columnString = "....";
    $valueString = "....";
    $sql = "INSERT INTO " . $table . " (" . $columnString . ") VALUES (" . $valueString . ")";
    try {
        $stmt = $this->pdo->prepare($sql);          
        foreach($request_data as $key => $value){
            $stmt->bindValue(':' . $key,$request_data[$key]);
        }
        $stmt->execute();
    } catch (PDOException $e) {
        return null;
    }

当然,这个代码在没有数据库问题发生时效果很好。

我使用的是Slim 3框架和php7。与php5相同的问题。

它与框架有关吗?还有其他配置吗?为什么地狱例外不是什么?

1 个答案:

答案 0 :(得分:2)

首先,在您创建use类实例或捕获异常PDO时,我的代码段中没有看到任何PDOException子句。如果你错过它们,它可能会给你错误,因为PHP无法找到它们的位置。您需要确保添加

use PDO;
use PDOException;

在引用这些类的代码中。

其次,您可以使用此代码来抑制与PDO操作相关的任何异常。

try {
    //your code
} (PDOException $e) {
    return null;
}

为了能够识别任何与数据库相关的错误的原因,您需要正确处理异常。您需要替换return null;来执行更有意义的操作来处理错误。