2016-08-17 85 views
6

這是我的表單中的$ _POST數組。

Array ([prescribedid] => Array ([0] => 1 [1] => 2 [2] => 3 [3] => 9 [4] => 13) 

我想爲Array中的任何項創建一個select。我已經寫了這個,它產生了正確的SELECT,但是if()消除了尾隨OR使它變得笨重。

$query = "SELECT * "; 
$query .= "FROM prescribed WHERE "; 

for($i=0; $i<count($_POST["prescribedid"]); $i++) { 
    $query .= "prescribedid={$_POST['prescribedid'][$i]} "; 
     if($i < (count($_POST["prescribedid"])-1)) { 
     $query .= "OR "; 
     } 
} 

它產生這樣的:

SELECT * FROM prescribed WHERE prescribedid=1 OR prescribedid=2 OR prescribedid=3 OR prescribedid=9 OR prescribedid=13 

是否有另一種方式來組選擇或寫FOR()使它更清潔,即沒有最後IF()。

+3

'提示:'您可以依次用'IN'避免多次'或'條款。 '...在指定的地方(1,2,3,9,13)....' – 1000111

+2

'提示:'您需要使用PDO或vaidate輸入。此代碼可用於SQL注入。 – ineersa

回答

8
$values=implode(",",$_POST["prescribedid"]); 
$query = "SELECT * FROM prescribed WHERE prescribedid IN ($values)"; 

Sanitization是你:)

2

你只可以在這裏使用IN子句。

參考MySQL IN clause

$query = "SELECT * FROM prescribed WHERE prescribedid IN ".implode(',', $_POST["prescribedid"]); 
4

使用MySQL IN子句

$ids = implode(",",$_POST["prescribedid"]); 
$query = "SELECT * FROM prescribed WHERE prescribedid IN ($ids)"; 
4

嗨,您可以使用Incondition。使用imploade功能查找逗號seoarated值

$data = array('prescribedid'=>array(1,2,3,9,14)); 
$query = 'SELECT * FROM prescribed WHERE prescribedid IN ('; 
$query .= implode(',',$data['prescribedid']).')'; 
echo $query ; 

輸出

SELECT * FROM prescribed WHERE prescribedid IN (1,2,3,9,14) 
+0

您不需要字符串連接(並且*可能會引起一些混淆,尤其是在此佈局中)。 –