围绕可选搜索参数构建SQL查询

时间:2014-02-13 10:17:20

标签: php mysql

我试图围绕PHP中的一些可选搜索参数构建MySQL查询。有3个搜索字段链接到我的数据库中的三列。用户应该能够单独搜索每个列,或者如果他们想缩小搜索结果,则最多可以搜索所有3列。

构建我的PHP代码,以便if中的一个搜索字段为空,它并不重要,它将继续在其他两个字段中搜索。但是,由于我已在where数组中指定了$whereclauses子句,因此我很难理解如何构建我的SQL查询。我在用户进行的任何搜索中返回相同的列,这样就可以使SQL查询非常简单,并且只需要定义一次。

我的PHP代码

<?php
require '../db/connect.php';
$whereclauses = array();
$subsets = false;

// for every field
if(!empty($_POST['name']))
  {
  $subsets = true;
  $whereclauses[] = " ARTIST = ". mysql_real_escape_string(trim($_POST['name']));
  }

if($subsets)
  {
  $whereclauses = implode(", ". $whereclauses);
  }
else
  {
  $whereclauses ="";
  }

PHP中的SQL查询

 if(!empty($whereclauses)) {
 $sql = "SELECT 
            `ARTIST`, `TRACKTITLE`, `DATE`, `LOCATION`
        FROM 
            `table 3`";
 };    
 $result = mysql_query($sql);
 $data = array();
 while ($array = mysql_fetch_assoc($result)) {
 $data[] = $array;
 }
 header('Content-type: application/json');
 echo json_encode($data);

如何将$whereclauses数组添加到我的$sql查询中?

2 个答案:

答案 0 :(得分:1)

<?php
require '../db/connect.php';
$whereclauses = array("where 1=1");
$subsets = false;

// for every field
if(!empty($_POST['name']))
  {
  $subsets = true;
  $whereclauses[] = " ARTIST = '". mysql_real_escape_string(trim($_POST['name']))."'";
  }

只是在sql

中内爆数组
$sql = "SELECT 
            `ARTIST`, `TRACKTITLE`, `DATE`, `LOCATION`
        FROM 
            `table 3` ".implode(" AND ",$whereclauses);

答案 1 :(得分:0)

 if(!empty($whereclauses)) {
     $sql = "SELECT 
            `ARTIST`, `TRACKTITLE`, `DATE`, `LOCATION`
        FROM 
            `table 3`";
     $sql.= " WHERE 1=1 ";
     foreach($whereclauses as $where){
        $sql.= " AND ".$where;
     }
 }

 $result = mysql_query($sql);
 $data = array();
 while ($array = mysql_fetch_assoc($result)) {
 $data[] = $array;
 }
 header('Content-type: application/json');
 echo json_encode($data);