プレースホルダのいい感じの作り方
頭が悪いタイトル。
例えば以下のようなクエリを組み立てることはよくあるのですが
SELECT ... FROM ... WHERE `id` IN (1, 2, 3, ...)
ここ。
IN (1, 2, 3, ...)
ここをPHP上で組み立てるのに最初は苦労しましたが、今は以下のように書いています。
$param_list = array(1, 2, 3, ...); $query = "SELECT ... "; $query .= "FROM ... "; $query .= "WHERE `id` IN (" . implode(",", array_fill(0, count($param_list), "?")) . ") ";
理屈は以下のとおり。
- $param_listの要素個数分の配列を生成し、中身は「?」にする
- implodeを用いてカンマ区切りの文字列に変換する
PHPは配列まわりの関数を使いこなすとこうやってあっさり1行で済むのが楽しいところですね。
ただ、毎回コピペしてるけどもうちょっとスマートにしたいな。