首页 > 解决方案 > 使用 PDO 时不向客户端显示警告

问题描述

我注意到 PDO 向最终客户端显示警告。例如,如果设置了无效的枚举值,则会显示警告:

SQLSTATE [01000]:警告:1265 行 1 的列“类型”的数据被截断

最终用户没有理由看到这一点。我宁愿只显示500状态代码,虽然这是用户的错,所以 400 会更合适。

这些是我当前的 pdo 选项:

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

我正在使用

error_reporting(E_ALL);
ini_set('display_errors', 0);

在脚本的顶部。

知道为什么会这样吗?

display_errors设置为 1时具有故意错误值的最小代码:

$stmt = $this->pdo->prepare("INSERT INTO MYTABLE (`type`) VALUES (?)");
$stmt->execute([$json->type]);

没有堆栈跟踪的完整消息

SQLSTATE[01000]:警告:1265 第 1 行的列“类型”的数据被截断
致命错误:未捕获的 PDOException:SQLSTATE [01000]:警告:1265 路径/api/v1/index 中第 1 行的“类型”列的数据被截断.php:35

标签: phppdo

解决方案


推荐阅读