我注意到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在...
如果您像我一样使用Apache2和PHP7,那么我向您保证,最好更改php.in
文件中的配置。代码级别的配置与我们有时可能期望的完全不同。