パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

SQLインジェクション対策:偽プリペアドステートメントに注意」記事へのコメント

  • by bero (5057) on 2011年11月09日 19時53分 (#2047664) 日記

    とはいえ、今時は何らかのフレームワークを使ってるだろうから、フレームワーク->ORM->DBライブラリと追っかけて「本物のプリペアドステートメントであることを確かめる」のは結構大変な気がする。

    ---
    ところで「絶対に文字列結合でSQLを構築しようとしてはいけない」件であるが、
    入力の個数が不定な場合がある(特にIN句)。

    select ... where .... in (?,?,?..?)

    やむを得ずB部分を文字列結合で生成してprepare -> bindしてるが、「絶対に文字列結合を使わない」良い方法があるだろうか?

    • by bero (5057) on 2011年11月10日 14時10分 (#2048148) 日記

      しまった表示されてない

      select ... where .... in (?,?,?..?)
      |-------A(固定)----------|-B(生成)-|

      親コメント
    • by Anonymous Coward

      PHPで、ですが…。

      $args = array('a', 'b', 'c', ...);
      $sql = 'SELECT ... WHERE ... IN (' . join(', ', array_fill(0, count($args), '?')) . ')';

      なんてのはどうでしょう?

海軍に入るくらいなら海賊になった方がいい -- Steven Paul Jobs

処理中...