2012-09-27 51 views
2

我寫一個代碼,在那裏我有可能產生許多OR語句的查詢,我認爲有一個更舒適的方式這比:我怎樣才能避免在MySQL查詢中的許多OR語句?

foreach ($plz as &$value) { 
    if (empty($i)) { 
     $query = "WHERE plz='$value'"; 
    } else { 
     $query = "$query OR plz='$value'"; 
    } 
    $i++; 
} 
$sql = mysql_query("SELECT * FROM table $query"); 
while ($data = mysql_fetch_array($sql)) { 
    //do something 
} 
+0

您是否試過IN語句? –

+0

而不是寫'$ query =「$ query OR plz ='$ value'」;'你可以使用'$ query。=「或plz ='$ value'」;'([。= operator](http:/ /php.net/manual/en/language.operators.string.php)來確定 –

回答

2

如果你有一列可能需要多個值,只是用IN運營商將它們連接起來:

而不是寫

... WHERE col=1 OR col=2 OR col=3 

只寫

... WHERE col IN (1,2,3) 

收集在PHP中的所有條目,使用數組和implode()後來:

// collecting values 
$vals = array(); 
$vals[] = 1; 
$vals[] = 2; 
// ... 

// add them to your query 
$query .= ' WHERE col IN (' . implode(',', $vals) . ')'; 

// execute the query ... 

如果你的價值觀是不是整數,而是需要被封閉在查詢中撇號,插入他們的方式進入排在第一位:

$vals[] = "'my string value'"; 
1

如果列plz是INT型,以及所有$plz也是整數,則:

$query = 'WHERE plz IN(' . implode(',', $plz) . ')'; 

會工作。否則,嘗試這可能會工作(未測試):

$query = 'WHERE plz IN(\'' . implode("','", $plz) . '\')'; 
+0

okey是'「'」。implode(「','」,$ plz)。「'」'但是1)它沒有工作如果$ PLZ沒有價值,2)這是危險的。 –

+1

答:如果$ plz爲空,則OP可以使用「IF」語句。這很明顯。 B.如果'$ plz'是字符串,這很危險。但是,OP還是沒有提到任何東西。 – hjpotter92

+0

很棒!謝謝! –

2

您正在尋找;

SELECT * FROM table WHERE plz in ('value1', 'value2', 'value3') 

注意的SQL injections ...

+0

sql注入是不可能的,因爲數組$ plz被生成。 –

相關問題