WHERE句のINでプレースホルダを使う際の注意点

DBIモジュールでは、プレースホルダを使う場合、基本的な記述は下記のようになる。

んで、SQL分にWHERE句を含んでいる場合で、条件をINで複数指定している場合、

でいけると思いきや、値の最初の要素(カンマで区切った一番最初の値=「あ」)のみプレースホルダに代入されて処理されてしまう。つまり、

と同じ結果となってしまう。

どうやらカンマで連結した文字列を渡しても、配列要素とみなされるようだ。

なので、条件の数分だけ、プレースホルダを作り指定してやる必要がある。

単純に書くと、

てな感じ。

現実的にはINの条件数は動的になると思うので、うちでは下記のような感じで処理している。

・DB処理用ファイル(database.pl)

・呼び出し元

PHPでもフレームワークによってここの処理が違ったりするので注意が必要。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*