Php 使用下拉值查询mySQL数据库

Php 使用下拉值查询mySQL数据库,php,mysql,Php,Mysql,下面是一段代码,其中$filter\u xx值是从用户选择的下拉列表中提取的 我正在尝试使用用户通过下拉选择来查询数据库的内容来查询mySQL数据库 您将看到有4个$filter_xx变量,在给定实例中设置的变量数量是完全随机的 问题是当我在查询中使用&&时,它会检查四个参数是否都为true,然后抛出并输出。我知道&应该是这样的!。我尝试用| |替换所有&&运算符,但没有成功 如何仅使用用户选择的选项搜索数据库 if(isset($filter_brand) || isset($filt

下面是一段代码,其中$filter\u xx值是从用户选择的下拉列表中提取的

我正在尝试使用用户通过下拉选择来查询数据库的内容来查询mySQL数据库

您将看到有4个$filter_xx变量,在给定实例中设置的变量数量是完全随机的

问题是当我在查询中使用&&时,它会检查四个参数是否都为true,然后抛出并输出。我知道&应该是这样的!。我尝试用| |替换所有&&运算符,但没有成功

如何仅使用用户选择的选项搜索数据库

    if(isset($filter_brand) || isset($filter_year) || isset($filter_month) || isset($filter_status)) 
         {
          $query = "SELECT * FROM targets WHERE brand='$filter_brand' && startyear='$filter_year' && startmonth='$filter_month' && status='$filter_status' ORDER BY createdon DESC";
          } else {
          $query = "SELECT * FROM targets ORDER BY createdon DESC";
         }
试试这个

$join = "";
//TAKE ONE BLANK VARIBLE THAT JOIN IF VALUE IS SET

if(isset($filter_brand)){
    //IF VALUE ISSET THAN IT ADDED TO QUERY 
    $join .= " AND brand='$filter_brand'";
}

if(isset($filter_year){
    $join .= " AND startyear='$filter_year'";
}

$query = "SELECT * FROM targets WHERE id != '' $join ORDER BY createdon DESC";
试试这个:

$query = "SELECT * FROM targets WHERE 1 ";
$query = isset($filter_brand) ? $query . " AND brand = '".$filter_brand."'" : $query;
$query = isset($filter_year) ? $query . " AND startyear = '".$filter_year."'" : $query;
$query = isset($filter_month) ? $query . " AND startmonth = '".$filter_month."'" : $query;
$query = isset($filter_status) ? $query . " AND status = '".$filter_status."'" : $query;
$query .= " ORDER BY createdon DESC";

您可以这样做:

$query = 'SELECT * FROM targets';

$flag = 0;
if(isset($filter_brand) ) 
{
    $query = "SELECT * FROM targets WHERE brand='$filter_brand'";
    $flag = 1;
}

if(isset($filter_year)) {
    if($flag==1)
        $query .= " &&";
    $query .= " startyear='$filter_year'";
    $flag = 1;
}

if(isset($filter_month)) {
    if($flag==1)
        $query .= " &&";
    $query = " startmonth='$filter_month'";
    $flag = 1;
}

if(isset($filter_status)){
    if($flag==1)
        $query .= " &&";
    $query = " status='$filter_status'";
    $flag = 1;
}

if($flag == 1){
    $query .= " ORDER BY createdon DESC";
} else {
    $query = "SELECT * FROM targets ORDER BY createdon DESC";
}

当您有几个必须以类似方式工作的值时,请将数组与循环一起使用。我猜想,您正在使用mysqli,如果需要,请更改PDO的报价

$mysqli = new mysqli("localhost", "user", "pass", "test");
//...

//SQL attr name => name of POST parameter
$filter = array('brand' => 'brand', 'startyear' => 'year', 
                'startmonth' => 'month', 'status' => 'status');

//here we'll store SQL conditions
$sql_filter = array();

foreach($filter as $key => $value)
{
    if (isset($_POST[$value]))
    {
        //use your library function to quote the variable before using it in SQL
        $sql_filter[] = $key . '="'. $mysqli->escape_string($_POST[$value]) . '"';
    }
}

$query = "SELECT * FROM targets ";

if(isset($sql_filter[0]))
{
    $query .= 'WHERE ' . implode(' AND ', $sql_filter) . ' ';
}

$query .= 'ORDER BY createdon DESC';

在将筛选变量放入SQL之前,您是否引用了它们?请分别检查每个变量,并且仅在查询有值时才将其附加到查询中谢谢@TarangP,您是否看到附加$join=.=的方式是正确的?我看到一个错误,上面写着。=出乎意料。不是因为。=是因为我漏掉了分号。你认为你的代码片段中遗漏的分号应该放在哪里?@TarangP确定它不是$join=.=也是吗?@MohanWijesena,就像我上面已经说过的,$join=.=也是一个问题。由于这是代码的前面部分,您首先会看到错误。看起来是一个完整的部分,但是根本不查询数据库。我这样说是因为绝对没有输出,也没有显示错误。当然很有趣!您看到需要更改的内容了吗?@MohanWijesena在发送到数据库之前,检查它生成的最后一个字符串是否为有效的SQL,并检查它在您期望它执行的操作方面是否有意义,以及检查数据库中是否有与查询筛选器匹配的行。我们也不知道你的代码,但是当你从PHP运行查询时,你在检查mysql错误吗?谢谢@ADyson是的,我会在我的本地工作环境中适当地清理和处理错误。@MohanWijesena告诉我们你得到的$query的值。根据参数,您希望得到什么查询?