Я заметил, что 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 Неустранимая ошибка : Uncaught PDOException: SQLSTATE [01000]: Предупреждение: 1265 Данные усечены для столбца «тип» в строке 1 в пути / api / v1 / index. php: 35