Смея да кажа, че е грешка. Намерих два подходящи билета:
- Бъг #63812 :PDO задейства предупреждение(я) независимо от стратегията за обработка на грешки, подадено през 2012 г. за PHP/5.3.19
- Бъг #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');