php - 使用 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
解决方案
推荐阅读
- java - 尝试工作并由用户输入以更改值
- c# - 是否可以以编程方式启用基于服务器的 SharePoint 集成?
- python - 如何返回,因为它在列表中具有最大 Sum 值
- javascript - Angular 反应式表单提交事件
- bash - 获取 bash 函数的除前 N 个参数之外的所有参数
- video-streaming - ThingsBoard 仪表板的视频源
- javascript - 具有多个条件的 for 循环不起作用(JS)
- vb.net - 为什么关闭打开应用程序后设置不保存,使用vb.net
- java - 使用 PATCH 方法删除列表的特定元素,该元素是另一个列表的元素。使用 dropwizard 编写
- python - 如何在 Python 中创建打印速度较慢的代码