ホーム DoRuby プレイスホルダの扱いがちょっと楽になる@PHP

プレイスホルダの扱いがちょっと楽になる@PHP

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

■プレースホルダ

SQL文作成時に、 実行時に値が決まる部分を「?」に置き換えて、

「?」に当てはめたい値を変数とか配列で指定します。

そうすると、SQLインジェクション対策のためのエスケープ処理を自動で行ってくれます。

————————————

 $id = 6; $sql = select * from t_bbs where id = ?;

 query($sql, $id);

————————————

「?」のところに「6」が入ります。 プレースホルダの使い方はこんな感じです。さくっといきます。

さて本題はここからですが、

プレースホルダは代入する数だけ「?」を適切な箇所に用意する必要があります。

例えば、上記の例を少し複雑にして、 複数のid値と一致したものをt_bbsから取得したいとします。

id値の数が固定なら頑張って下記のようにできますが・・・ スマートではありません・・・

$sql = select * from t_bbses where id = ? or id = ? or id = ?;

そこで、複数のid値を配列に格納して、かつその格納した数だけ「?」を生成してあげましょう。

$id = array(1,2,3); $holder = implode(‘, ‘, array_fill(0, count($id), ‘?’));

count()で配列の中身の数を取得し、

array_fill()により、0番目から配列の中身の数だけ「?」を挿入します。

implode()により、「?」と「?」の間に「,」を挿入します。

そうすると、出来上がりは、$holder = (?, ?, ?)となります。

$sql = select * from t_bbses where id IN ($holder); query($sql, $id); IN句を使ってまとめてあげると、すっきりしたSQL文の完成です!

記事を共有

最近人気な記事