PDO 不会引发异常



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

我的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);

以及一个例子,例如,我插入了一个具有单性约束的重复行(但未知行或任何 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 也有同样的问题。

它与框架有关吗?还有其他配置吗?为什么地狱例外没有被抓住?

首先,当您创建类实例或捕获异常PDOException时,我在代码片段中看不到任何PDOuse子句。如果你错过了它们,它可能会给你错误,因为PHP找不到它们在哪里。您需要确保添加

use PDO;
use PDOException;

在引用这些类的代码中。

其次,使用此代码禁止与 PDO 操作相关的任何异常。

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

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

最新更新