カテゴリー
コンピューター

動的に SQL の IN 句のバインドを生成する方法をメモ【PHP】

サンプルソース

<?php
// table の id に対して次の値が検索条件として渡されてくると仮定
$data = array(2, 7, 14, 23);

/*
 * 入力値の数だけ ,? を繰り返し、2文字目以降を取得することで動的に SQL の IN 句のバインドを生成
 *
 * 1.count(array(2, 7, 14, 23)) で渡されてきた入力パラメーターの数をかぞえる。結果は 4 となる。
 * 2.str_repeat(',?', 4) で ',?' を 4 回繰り返す。結果は ,?,?,?,? となる。
 * 3.substr(',?,?,?,?', 1) で ,?,?,?,? 文字列の 2 番目から最後までを返す。結果は ?,?,?,? となる。
 */
$sql = 'SELECT * FROM testtable WHERE id IN(' . substr(str_repeat(',?', count($data)), 1) . ')';

// SELECT * FROM testtable WHERE id IN(?,?,?,?) と表示されれば成功!
echo $sql;
?>

使っている関数へのリンクまとめ