Setelah menghabiskan berjam-jam mencoba untuk mengisolasi bagian dari kode saya untuk memecahkan masalah ini, saya melihat bahwa kesalahan hilang setelah menyetel tanda ATTR_EMULATE_PREPARES ke true.
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
Ini memberi tahu PDO untuk meniru pernyataan yang disiapkan alih-alih secara asli oleh MySQL. Dari apa yang saya baca, umumnya disarankan untuk mematikan tanda ini (secara default memang benar) jika Anda menggunakan versi MySQL dan PHP yang paling mutakhir. Anda dapat menemukan informasi lebih lanjut tentang itu di Jadi artikel .
Saya percaya ini adalah bug dengan MySQL (saya punya masalah hingga versi 5.6.17). Tidak banyak diskusi tentang masalah khusus ini, jadi semoga ini menghemat waktu pemecahan masalah orang lain. Masalahnya juga dibahas di halaman bug MySQL ini , tetapi solusi yang diposting tidak membantu saya dalam situasi saya.