あえてバグだと思います。関連するチケットが2つ見つかりました:
- バグ#63812 :エラー処理戦略に関係なく、PHP/5.3.19用に2012年に提出されたPDOトリガー警告
- バグ#74401 :PDOトリガー警告はすでにスロー例外を設定しており、2017年にPHP/7.0.17で提出されました
いずれにせよ、それらはまだ開いており、それらが有効な問題であるかどうかは完全には明らかではありません(私はそれらが有効であると思いますが)。他のMySQLエラーは警告と例外の両方をトリガーしないため、これは設計上の決定ではないようです。
$connection = new PDO('mysql:host=127.0.0.1;dbname=test', 'test', 'test',
[PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING]);
$connection->query('SELECT * FROM foo');
$connection = new PDO('mysql:host=127.0.0.1;dbname=test', 'test', 'test',
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
$connection->query('SELECT * FROM foo');