如果我有<search input =“”> <account password =“”input =“”>,我是否需要使用mysql_real_escape_string?</account> </search>

时间:2012-10-09 08:32:01

标签: php mysql

如果我的搜索输入没有帐号/密码输入,我是否需要使用mysql_real_escape_string?
可能是sql注入? $ sql只选择限制行的位置

<input type="text" name="search">

include"set.php";
$search=$_POST["search"];
if(strlen($search)) >= $min_length){
    $sql="select * from $tbl where subject or content like '%search%';";
    ..  
}

(mysql:主题和内容都是'text'类型)


如果我需要使用,我尝试这个但不起作用。     

include"set.php";
$search=mysql_real_escape_string($_POST["search"]);
if(strlen($search)) >= $min_length){
    $sql="select * from $tbl where subject or content like '%search%';";
    ..
    if(mysql_num_rows($query)>0){
        while ($list= mysql_fetch_array($query)){
            $subject=$list[subject];
            $content=$list[content];
            $...=$list[...];
            print "subject: $subject, ....";
        }
    }
    else{
         print "no results";
    }
}
else{
print "minimum length is". $min_length;
}

3 个答案:

答案 0 :(得分:3)

你需要使用准备好的陈述而不是逃避(是的所有时间)。

答案 1 :(得分:1)

一个。它应该是$_POST而不是$_post变量名称在PHP中区分大小写

B中。 mysql_**折旧使用mysqli_real_escape_string代替

来自PHP DOC

  

不鼓励使用此扩展程序。相反,应该使用MySQLi或PDO_MySQL扩展。另请参阅MySQL:选择API指南和相关的常见问题解答以获取更多信息。该功能的替代方案包括:

℃。最好使用$_GET来设计搜索表单,以便轻松保存URL

示例

$search = filter_var($_GET["search"], FILTER_SANITIZE_STRING , FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH);
if($search && strlen($search) > 3)
{
    $search = mysqli_real_escape_string($link, $search);
    $sql = sprintf("SSELECT * FROM %s where subject or content like '%s';",$tbl,"%s" . $search ."%s");
}

d。您永远不会信任用户输入,并且不会一直验证和过滤

答案 2 :(得分:1)

您需要$_POST$search

$search=mysql_real_escape_string($_POST["search"]);

$sql="select * from $tbl where subject or content like '%".$search."%';";

是的,每次你都应该逃避用户的任何输入,无论如何。