2012-05-07 181 views
0

我一直在絞盡腦汁,似乎無法弄清楚這一點。我甚至不確定正確的方法來要求谷歌獲得解決方案的一些想法,所以我問你。我試圖做一個「高級搜索」的形式來搜索數據庫,但如果一個輸入字段爲空來忽略它。PHP高級搜索

我的SQL:

$sql = "SELECT * FROM msds WHERE MIS = {$MIS}"; 
if(!empty($input01)) { $sql .= "AND column01 LIKE '%" . $input01. "%' AND column05 LIKE '%" . $input05. "%'" } 
if(!empty($input02)) { $sql .= "OR column02 LIKE '%" . $input02. "%'" } 
if(!empty($input03)) { $sql .= "OR column03 LIKE '%" . $input03. "%'" } 
if(!empty($input04)) { $sql .= "OR column04 LIKE '%" . $input04. "%'" } 
$sql .= "ORDER BY column01"; 
$sql .= "LIMIT {$per_page} OFFSET {$pagination->offset()}"; 

感謝您的幫助,您可以提供。

+0

請告訴我,您在將它們連接到查詢之前先逃脫這些輸入! – Tibor

+1

如果您真的在製作高級搜索表單,那麼也許您應該使用'mysql全文搜索'。對於搜索/排名結果,這比'LIKE'更好。 – w00

回答

2

看看你正在推出的最終SQL。如果沒有別的,它會讀取像OR column03 LIKE '%something%'OR column04 LIKE '%something%'ORDER BY column01LIMIT ... - 錯誤嘉豪! - 因爲你沒有在連接的各個部分之間放置空格。

1

請嘗試這樣的事情 -

$qry = "SELECT * FROM msds WHERE "; 
if ($input01 != '') { 
    $qry .= "input01='".mysql_real_escape_string($input01)."' AND " 
} 
if ($input02 != '') { 
    $qry .= "input02='".mysql_real_escape_string($input02)."' AND " 
} 
$qry .= '1'; 
$res = mysql_query($qry); 

查詢根據什麼設定建成。