Po spędzeniu wielu godzin na próbach wyizolowania części mojego kodu w celu rozwiązania tego problemu zauważyłem, że błąd zniknął po ustawieniu flagi ATTR_EMULATE_PREPARES na true.
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
To mówi PDO, aby emulował przygotowane instrukcje zamiast natywnie przez MySQL. Z tego, co czytałem, generalnie zaleca się wyłączenie tej flagi (domyślnie jest to prawda), jeśli używasz najbardziej aktualnej wersji MySQL i PHP. Więcej informacji na ten temat znajdziesz w tym WIĘC artykuł .
Uważam, że jest to błąd w MySQL (miałem problem do wersji 5.6.17). Nie ma zbyt wielu dyskusji na temat tego konkretnego problemu, więc miejmy nadzieję, że zaoszczędzi to komuś innemu godzin rozwiązywania problemów. Problem jest również omawiany na tej stronie z błędami MySQL , ale opublikowane rozwiązanie nie pomogło mi w mojej sytuacji.