我需要设置一个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语句中。
答案 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 "
}
}