2012-05-07 186 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); 

查询根据什么设定建成。