Oserei dire che è un bug. Ho trovato due biglietti rilevanti:
- Bug #63812 :Avviso/i trigger PDO indipendentemente dalla strategia di gestione degli errori, depositato nel 2012 per PHP/5.3.19
- Bug #74401 :avviso trigger PDO già impostato throw eccezione, depositato nel 2017 per PHP/7.0.17
In ogni caso, sono ancora aperti e non è del tutto chiaro se siano problemi validi (anche se sospetto che lo siano). Non sembra essere una decisione di progettazione perché altri errori MySQL non attivano entrambi, avviso ed eccezione:
$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');