Nachdem ich viele Stunden damit verbracht hatte, Teile meines Codes zu isolieren, um dieses Problem zu lösen, bemerkte ich, dass der Fehler verschwand, nachdem ich das Flag ATTR_EMULATE_PREPARES auf true gesetzt hatte.
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
Dies weist PDO an, die vorbereiteten Anweisungen statt nativ von MySQL zu emulieren. Nach dem, was ich gelesen habe, wird allgemein empfohlen, dieses Flag zu deaktivieren (es ist standardmäßig wahr), wenn Sie die aktuellste Version von MySQL und PHP verwenden. Weitere Informationen dazu finden Sie in diesem SO-Artikel .
Ich glaube, dass dies ein Fehler mit MySQL ist (ich hatte das Problem bis Version 5.6.17). Es gibt nicht viel Diskussion über dieses spezielle Problem, also erspart dies hoffentlich jemand anderem Stunden der Fehlersuche. Das Problem wird auch auf dieser MySQL-Fehlerseite diskutiert , aber die gepostete Lösung hat mir in meiner Situation nicht geholfen.