使用多个参数设置SQL查询

时间:2014-02-10 21:09:53

标签: php mysql sql

我需要设置一个SQL查询,其中包含从URL中提取的多个参数。到目前为止,我只能使用URL中只有一个项目。

我的默认查询以提取所有内容

$sql = "SELECT "; 
$sql .= "* ";
$sql .= "FROM ";
$sql .= "cms_site_content ";
$sql .= "WHERE ";
$sql .= "1";

然后我检查是否有任何内容通过URL传递并检索它。

if (isset($_GET["d"])) {
$d=$_GET["d"];

在if语句中,我将传递为“d”的值分解为单独的项

$newD = explode(',',$d);
$countD = count($newD);


foreach($newD as $discipline) {

if ($countD == 1) {
            $sql .= " AND";
    $sql .= " discipline='".$discipline."'";
}

如果有多个规则值,我的问题是让SQL工作。它应该是这样的:

SELECT * FROM cms_site_content WHERE 1 AND discipline="value"

但是,如果有多个学科值,则应为:

SELECT * FROM cms_site_content WHERE 1 AND discipline="value OR discipline="value2" OR discipline="value3"

有没有更有效的方法来写这个?我无法弄清楚如何将OR插入到foreach语句中。

2 个答案:

答案 0 :(得分:2)

将所有学科值保存在数组中;

$discipline_arr = array();
foreach($newD as $discipline) {

    $discipline_arr[] = $discipline; 
    // by the way, don't forget to escape for sql injection 
    // mysql_escape_string is the depracated one, u can use that if u have no 
    // other choice 


}

然后在你的sql中,将它们作为规则添加到('value1','value2','etc ...')条件中(对于字符串,对于数字类型,它就像纪律一样(1,2, 3,4等)

$sql = " SELECT * FROM cms_site_content WHERE 1 " . 
    (empty($discipline_arr) ? "" : "and 
         discipline in ('". implode("','" , $discipline_arr). "') ") ; 

链接到转义 http://tr1.php.net/manual/en/function.mysql-escape-string.php

答案 1 :(得分:1)

假设您的其余查询完好无损。只需将所有纪律值存储在数组中,如下所示,然后将$discipline_string提供给$sql查询:

$discipline_ary = array('option1', 'option2', 'option3');
$discipline_string = "";

for($i=0; $i < count($discipline_ary); $i++){
    $discipline_string .= " discipline = '" . $discipline[$i] . "' ";

    if($i+1 == count($discipline_ary)){
       break;
    }else{
       $discipline_string .= " OR "
    }
}