[使用PDO时不向客户端显示警告

问题描述 投票:0回答:1

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

SQLSTATE [01000]:警告:1265行1的列'type'的数据被截断了>]

最终用户没有理由看到这个。我宁愿只显示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的列'type'的数据被截断严重错误

:未捕获的PDOException:SQLSTATE [01000]:警告:1265路径/api/v1/index.php:35中第1行的列'type'的数据被截断了>

我注意到PDO向最终客户端显示警告。例如,如果设置了无效的枚举值,则显示警告:SQLSTATE [01000]:警告:1265在...

php pdo
1个回答
0
投票

如果您像我一样使用Apache2和PHP7,那么我向您保证,最好更改php.in

文件中的配置。代码级别的配置与我们有时可能期望的完全不同。
© www.soinside.com 2019 - 2024. All rights reserved.