MW211 EXIT

devlog
PHP/配列でSQL抽出
2011年10月24日
配列$idに抽出したいIDを格納しておいて、
これを元にSELECT文を発行したい場合には、以下のような感じに
「implode()」で「,」区切り一直線に連結して「WHERE IN()」の中にぶち込むとよい。
┌──────────────────────────────────────┐
│SELECT *                                                                    │
│    FROM 表                                                                 │
│    WHERE "ID" IN ({implode(',', $id)});                                    │
└──────────────────────────────────────┘
#これはあくまでイメージで、実際には「.」とかで文字列結合してください

すると以下のようになるわけだ。
┌──────────────────────────────────────┐
│SELECT *                                                                    │
│    FROM 表                                                                 │
│    WHERE "ID" IN (1,2,3);                                                  │
└──────────────────────────────────────┘

しかし、配列$idに一件もIDがないと、以下のようになって当然エラー。
┌──────────────────────────────────────┐
│SELECT *                                                                    │
│    FROM 表                                                                 │
│    WHERE "ID" IN ();                                                       │
└──────────────────────────────────────┘

ということで、これを回避するには、「WHERE IN()」の部分に
ありえない値を入れるのが手っ取り早いのではないだろうか。
┌──────────────────────────────────────┐
│SELECT *                                                                    │
│    FROM 表                                                                 │
│    WHERE "ID" IN (0);                                                      │
└──────────────────────────────────────┘
※IDが「1」から始まり「0」がないことが前提

万全を期すならば「WHERE IN()」の部分を「WHERE FALSE」に
(条件分岐で)置換してあげるという手もある
┌──────────────────────────────────────┐
│SELECT *                                                                    │
│    FROM 表                                                                 │
│    WHERE FALSE;                                                            │
└──────────────────────────────────────┘

間違っても、WHERE句毎削除してはいけない。
┌──────────────────────────────────────┐
│SELECT *                                                                    │
│    FROM 表;                                                                │
└──────────────────────────────────────┘
全件ひっかかってしまう(該当ありになってしまう)からだ。
分類:SQL、PHP配列