2

如果我有一个搜索输入而不是帐户/密码输入,我需要使用 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:主题和内容都是'文本'类型)


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

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;
}
4

3 回答 3

3

您需要使用准备好的语句而不是转义(始终是)。

于 2012-10-09T08:32:53.390 回答
1

$_POSTA. 变量名在 PHP 中不应该$_post区分大小写

B.弃用mysql_**mysqli_real_escape_string代替

来自 PHP 文档

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

C. 最好设计一个搜索表单,$_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. 你永远不会相信用户输入,并且总是验证和过滤

于 2012-10-09T08:33:41.513 回答
1

你需要$_POST$search

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

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

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

于 2012-10-09T08:33:46.367 回答