2016-08-17 78 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

您不需要字符串连接(并且*可能会引起一些混淆,尤其是在此布局中)。 –