Śmiem twierdzić, że to błąd. Znalazłem dwa odpowiednie bilety:
- Błąd nr 63812 :Ostrzeżenie o wyzwalaczach PDO niezależnie od strategii obsługi błędów, zgłoszone w 2012 r. dla PHP/5.3.19
- Błąd nr 74401 :Ostrzeżenie o wyzwalaczu PDO już ustawiono wyjątek, zgłoszony w 2017 roku dla PHP/7.0.17
W każdym razie nadal są otwarte i nie jest do końca jasne, czy są to ważne problemy (choć podejrzewam, że tak). Nie wydaje się to być decyzją projektową, ponieważ inne błędy MySQL nie wywołują jednocześnie ostrzeżenia i wyjątku:
$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');