2012-03-02 7 views
0

次は、動作させようとしているクエリです。mySQL WHERE句に値以外の値を渡す

$array = array(); 

SELECT * FROM ENTRIES 
WHERE 
    entry_id = '12' 
OR 
    entry_id_extra IN ('$array') 

これはもちろん簡略化されています。問題は、配列に項目があり、すべてがうまく返ってもうまくいくことです。しかし、配列にアイテムがない場合、それは動作しません。

配列に項目がない場合に壊れないこのステートメントを作成する正しい方法は何ですか?私はIN ('NULL','$array')を試みたが、そのdidntの仕事。

何か助けていただければ幸いです。

答えて

2

あなたは句は、条件付きチェックを通過どこのOR一部にすることができます。

$sql = "SELECT * FROM entries WHERE entry_id = 12" 

if (count($array) > 0) { 
    $sql .= ' OR entry_id_extra IN ($array)'; 
} 
+1

私にそれを打つ。 OR演算子は、配列が空の場合に失敗した場合にはぶら下がっていました – Shattuck

+0

完璧!それはまさに私が必要なものです。 – ekard9

+0

甘い。可能であれば受け入れてください。 –

0
$array = array(...); 
$array = array_map('mysql_escape_string', $array); // make sure it's safe 
$query = "SELECT * 
      FROM  entries 
      WHERE entry_id = '12'" 
     . (count($array) > 0 
     ? " OR entry_id_extra IN ('" . implode("','", $array) . "')" 
     : ""); 

// echo the query to see what it looks like (optional) 
echo "<pre>{$query}</pre>"; 

あなたはimplodeを使用するだけでなく、引用符が設定されていないので、あなたが値をエスケープすることを確認することができますがクエリをオフにします。