PDO 不会抛出异常
PDO does not throw exception
我知道这个问题已经出现过很多次了,但没有一个答案适合我。
我的 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.
同样的问题
跟框架有关系吗?还有其他配置吗?为什么不捕获异常?
首先,当您创建 PDO
class 实例或捕获异常 PDOException
时,我在您的代码片段中没有看到任何 use
子句。如果您错过了它们,可能会给您带来错误,因为 PHP 无法找到它们的位置。您需要确保添加
use PDO;
use PDOException;
在引用那些 class 的代码中。
其次,使用此代码抑制与 PDO 操作相关的任何异常。
try {
//your code
} (PDOException $e) {
return null;
}
为了能够识别任何与数据库相关的错误的原因,您需要正确处理异常。您需要替换 return null;
以执行更有意义的操作来处理错误。
我知道这个问题已经出现过很多次了,但没有一个答案适合我。
我的 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.
同样的问题跟框架有关系吗?还有其他配置吗?为什么不捕获异常?
首先,当您创建 PDO
class 实例或捕获异常 PDOException
时,我在您的代码片段中没有看到任何 use
子句。如果您错过了它们,可能会给您带来错误,因为 PHP 无法找到它们的位置。您需要确保添加
use PDO;
use PDOException;
在引用那些 class 的代码中。
其次,使用此代码抑制与 PDO 操作相关的任何异常。
try {
//your code
} (PDOException $e) {
return null;
}
为了能够识别任何与数据库相关的错误的原因,您需要正确处理异常。您需要替换 return null;
以执行更有意义的操作来处理错误。