この問題を解決するためにコードの一部を分離しようと何時間も費やした後、ATTR_EMULATE_PREPARESフラグをtrueに設定すると、エラーが解消されたことに気付きました。
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
これは、MySQLによってネイティブにではなく、プリペアドステートメントをエミュレートするようにPDOに指示します。私が読んでいることから、MySQLとPHPの最新バージョンを使用している場合は、通常、このフラグをオフにすることをお勧めします(デフォルトではtrueです)。詳細については、このをご覧ください。 SO記事 。
これはMySQLのバグだと思います(バージョン5.6.17まで問題がありました)。この特定の問題についてはあまり議論されていないので、うまくいけば、これにより他の誰かがトラブルシューティングにかかる時間を節約できます。この問題は、このMySQLバグページ でも説明されています。 、しかし投稿された解決策は私の状況では役に立ちませんでした。