搜索数据库的字符串

时间:2011-07-14 20:36:19

标签: php mysql

我是以正确的方式来做这件事的吗?我有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);
}

1 个答案:

答案 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注入攻击。永远不要直接将用户提供的数据插入数据库查询中,即使您是唯一使用该系统的人。