Saya berani mengatakan itu bug. Saya menemukan dua tiket yang relevan:
- Bug #63812 :PDO Memicu Peringatan Terlepas dari Strategi Penanganan Kesalahan, diajukan pada 2012 untuk PHP/5.3.19
- Bug #74401 :Peringatan pemicu PDO sudah menetapkan pengecualian lemparan, diajukan pada 2017 untuk PHP/7.0.17
Bagaimanapun, mereka masih terbuka dan tidak sepenuhnya jelas apakah itu masalah yang valid (meskipun saya curiga itu). Tampaknya ini bukan keputusan desain karena kesalahan MySQL lainnya tidak memicu keduanya, peringatan dan pengecualian:
$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');