我试图围绕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
查询中?
答案 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);