我是以正确的方式来做这件事的吗?我有4个输入区域,这些区域都围绕着数据库搜索的过滤,而对于如何正确执行此操作只是有点困惑。我得到了什么:
$e_s=mysql_real_escape_string($_POST['var_specs']);
$ven=mysql_real_escape_string($_POST['vender']);
$xtp=mysql_real_escape_string($_POST['xtype']);
$sar=mysql_real_escape_string($_POST['sarea']);
if(strlen($e_s) > 1){
if ($e_s && $Area=="vars"){
$AreaSearch = "db_vars";
$TypeResults = "vars";
$TypeUrl = "vars";
$search = $e_s;
}
// IF VENDER
if($ven=="ALL" || $ven==""){
$vender_search="%";
}
else {
$vender_search="%".$ven."%";
}
// IF TYPE
if($xtp=="ALL"){
$xtype_search="%";
}
else {
$xtype_search="%".$xtp."%";
}
// IF AREA
if($sar=="ALL"){
$sarea_search="%";
}
else {
$sarea_search="%".$sar."%";
}
// RUN QUERY
$result = mysql_query("SELECT * FROM ".$AreaSearch." WHERE name LIKE '%".$search."%' AND vender LIKE ".$vender_search." AND xtype LIKE ".$xtype_search." AND sarea LIKE ".$sarea_search);
}
答案 0 :(得分:1)
更好的方法是:
$parameters = array();
if($ven != "ALL" && $ven != "") {
$parameters[] = "vender LIKE '%" . mysql_real_escape_string($ven) . "%'";
}
if ($xtp ...) {
$parameters[] = ...
}
if ($sar ...) {
etc...
if (count($parameters > 0) {
$where_clause = implode(' AND ', $parameters);
$sql = "SELECT * FROM ... WHERE $where_clause";
$result = mysql_query($sql) or die(mysql_error());
...
} else {
die("NO search parameters entered");
}
注意上面对mysql_real_escape_string()的调用。这将转义用户提供的文本中的任何SQL元字符并防止SQL注入攻击。永远不要直接将用户提供的数据插入数据库查询中,即使您是唯一使用该系统的人。