アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

('ω') < イザユケエンジニャー

プレースホルダのいい感じの作り方

頭が悪いタイトル。

例えば以下のようなクエリを組み立てることはよくあるのですが

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行で済むのが楽しいところですね。


ただ、毎回コピペしてるけどもうちょっとスマートにしたいな。