事象
MYSQLでWHERE INで値を大量に指定した際(10万個くらい)以下のエラーが発生した
SELECT * FROM user WHERE name IN ('tanaka','suzuki','kato'...)
Prepared statement contains too many placeholder
原因
MYSQLのプリペアードステートメントのプレースホルダーの上限は65,535までらしい
対応
IN句に渡す値を上限に行かない数に分割して、複数回SQLを実行する形式に変更
-- 60000件
SELECT * FROM user WHERE name IN ('tanaka','suzuki','kato'...)
-- 40000件
SELECT * FROM user WHERE name IN ('ishida','mori','saito'...)
参考
[MySQL] too many placeholders の解消
https://qiita.com/idek/items/80ffb8e4ffe99e28caed
MySQL: プリペアドステートメントのプレースホルダーの数は65535まで。
https://cufl.hateblo.jp/entry/2021/08/25/215402