Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用多个参数设置SQL查询_Php_Mysql_Sql - Fatal编程技术网

Php 使用多个参数设置SQL查询

Php 使用多个参数设置SQL查询,php,mysql,sql,Php,Mysql,Sql,我需要使用从URL提取的多个参数设置SQL查询。到目前为止,我只能让它工作的URL中只有一个项目 我的默认查询是拉入所有内容 $sql = "SELECT "; $sql .= "* "; $sql .= "FROM "; $sql .= "cms_site_content "; $sql .= "WHERE "; $sql .= "1"; 然后,我检查是否有任何内容通过URL传递并检索它 if (isset($_GET["d"])) { $d=$_GET["d"]; 在if语句中,我将作

我需要使用从URL提取的多个参数设置SQL查询。到目前为止,我只能让它工作的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"

有没有更有效的方法来写这个?我不知道如何在foreach语句中插入OR

假设您的查询的其余部分是得体的。只需将所有规程值存储在一个数组中,如下所示,然后将
$production\u字符串
馈送到
$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 "
    }
}
$production\u ari=array('option1','option2','option3');
$PRODUCTION_string=“”;
对于($i=0;$i
假设您的查询的其余部分是正确的。只需将所有规程值存储在一个数组中,如下所示,然后将
$production\u字符串
馈送到
$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 "
    }
}
$production\u ari=array('option1','option2','option3');
$PRODUCTION_string=“”;
对于($i=0;$i
假设您的查询的其余部分是正确的。只需将所有规程值存储在一个数组中,如下所示,然后将
$production\u字符串
馈送到
$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 "
    }
}
$production\u ari=array('option1','option2','option3');
$PRODUCTION_string=“”;
对于($i=0;$i
假设您的查询的其余部分是正确的。只需将所有规程值存储在一个数组中,如下所示,然后将
$production\u字符串
馈送到
$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 "
    }
}
$production\u ari=array('option1','option2','option3');
$PRODUCTION_string=“”;
对于($i=0;$i
将所有规程值保存在一个数组中

$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,etc)中的规程)

链接到转义
将所有规程值保存在数组中

$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,etc)中的规程)

链接到转义
将所有规程值保存在数组中

$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,etc)中的规程)

链接到转义
将所有规程值保存在数组中

$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,etc)中的规程)

链接到转义

有很多很棒的库和框架可以为您完成所有这些,包括安全性,为什么要重新发明轮子?您应该阅读如何将PDO与MySQL结合使用:您可以使用圆括号进行“块”检查(
SELECT*FROM cms\u site\u content,其中1和(规程=“value”或规程=“value2”)
)。我建议删除
1和
块以使自己更轻松,或者甚至使用一个框架/库来完成这项工作。你能推荐一些简单的库来研究吗?我刚开始学习PHP,我不确定从哪里开始使用库来完成类似的工作,我认为这是一种过分的做法。最后,SQL查询只是字符串。您所需要的只是一点代码来生成包含多个条件的字符串,即
规程='option1'或规程='option2'或规程='option3'
,等等。请参见下面的答案。有很多很棒的库和框架可以为您完成所有这些,包括安全性,为什么要重新发明w鞋跟?您应该了解如何在MySQL中使用PDO:您可以使用圆括号进行“块”检查(
SELECT*FROM cms\u site\u content,其中1和(学科=“值”或学科=“值2”)
)。我建议删除
1和
块以使自己更轻松,或者甚至使用一个框架/库来完成这项工作。你能推荐一些简单的库来研究吗?我刚开始学习PHP,我不确定从哪里开始使用库来完成类似的工作,我认为这是一种过分的做法。最后,SQL查询只是字符串。您所需要的只是一点代码来生成包含多个条件的字符串,即
规程='option1'或规程='option2'或规程='option3'
,等等。请参见下面的答案。有很多很棒的库和框架可以为您完成所有这些,包括安全性,为什么要重新发明w鞋跟?您应该阅读如何将PDO与MySQL结合使用:您可以使用圆括号来进行“块”检查(
SELECT*FROM cms\u site\u content,其中1和(学科=“值”或学科=“值2”)
)。我建议删除
1