Jag skulle våga påstå att det är en bugg. Jag hittade två relevanta biljetter:
- Bug #63812 :PDO utlöser varning(er) oavsett felhanteringsstrategi, inlämnad 2012 för PHP/5.3.19
- Bug #74401 :Varning för PDO-utlösare har redan angett ett undantag för kast, inlämnad 2017 för PHP/7.0.17
I alla fall är de fortfarande öppna och det är inte helt klart om de är giltiga problem (även om jag misstänker att de är det). Det verkar inte vara ett designbeslut eftersom andra MySQL-fel inte utlöser både varning och undantag:
$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');