2014-02-13 75 views
0

我試圖圍繞PHP中的一些可選搜索參數構建MySQL查詢。有3個搜索字段鏈接到我的數據庫中的三列。用戶應該能夠單獨搜索每個列,或者如果他們想縮小結果範圍,則最多可以搜索3個列。圍繞可選搜索參數構建SQL查詢

我的PHP代碼是建立的,如果其中一個搜索字段是空的,沒關係,它會繼續搜索另外兩個字段。然而,我很努力地想知道如何構建我的SQL查詢,因爲我的where子句已經在$whereclauses數組中指定。我在用戶進行的任何搜索中返回相同的列,以便使SQL查詢非常簡單並且意味着它只需要定義一次。

我的PHP代碼:在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 =""; 
    } 

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

您可以添加更多的地方使用 「AND」 命令條款。 所以你必須選擇3箇中的至少1個,最多3個是否正確? – Newbi3

回答

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); 
+0

非常感謝!絕對是把我指向正確的方向。在定義'$ result'之後立即出現問題。 'mysql_fetch_assoc'行返回一個錯誤'mysql_fetch_assoc()需要參數1爲資源「。我是否正確構建這個部分? – Byate

+0

可能的原因將是查詢失敗或將不會有數據庫連接(只是通過'echo'打印查詢並檢查) – senK

+0

是的,我正在研究這個 - 但是我認爲我可以排除數據庫連接問題,因爲在調試時MySQL錯誤它顯示'未知列'COLDPLAY'在'where子句'中。因此,當我搜索COLDPLAY時,它搜索列名而不是列值 – Byate

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);