その他
    ホーム 技術発信 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文の完成です!