如果我的搜索输入没有帐号/密码输入,我是否需要使用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;
}
答案 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."%';";
是的,每次你都应该逃避用户的任何输入,无论如何。