Sau nhiều giờ cố gắng cô lập các phần mã của mình để giải quyết vấn đề này, tôi nhận thấy rằng lỗi đã biến mất sau khi đặt cờ ATTR_EMULATE_PREPARES thành true.
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
Điều này yêu cầu PDO mô phỏng các câu lệnh đã chuẩn bị thay vì MySQL tự nhiên. Theo những gì tôi đã đọc, bạn thường nên tắt cờ này (nó đúng theo mặc định) nếu bạn đang sử dụng phiên bản MySQL và PHP mới nhất. Bạn có thể tìm thêm thông tin về điều đó trong SO bài viết .
Tôi tin rằng đây là một lỗi với MySQL (tôi đã gặp sự cố lên đến phiên bản 5.6.17). Không có nhiều cuộc thảo luận về vấn đề cụ thể này vì vậy hy vọng điều này sẽ tiết kiệm cho người khác hàng giờ khắc phục sự cố. Vấn đề cũng được thảo luận trên trang lỗi MySQL này , nhưng giải pháp đã đăng không giúp tôi trong tình huống của tôi.