Php mysqli\u real\u escape\u字符串不起作用?
我得到了这个简单的搜索引擎代码,但steal无法阻止我的SQL注入Php mysqli\u real\u escape\u字符串不起作用?,php,mysql,mysqli,phpmyadmin,Php,Mysql,Mysqli,Phpmyadmin,我得到了这个简单的搜索引擎代码,但steal无法阻止我的SQL注入 $sql = mysqli_real_escape_string($searchengine,$sql); 不起作用或者我用错了。。。我做错了什么 <?php mysql_connect("localhost", "root", ""); mysql_select_db("searchengine"); $sql = mysql_query("SELECT * FROM searchengine WHERE page
$sql = mysqli_real_escape_string($searchengine,$sql);
不起作用或者我用错了。。。我做错了什么
<?php
mysql_connect("localhost", "root", "");
mysql_select_db("searchengine");
$sql = mysql_query("SELECT * FROM searchengine WHERE pagecontent LIKE '%$_GET[term]%' LIMIT 0,$_GET[results]");
while($ser = mysql_fetch_array($sql)) { echo "<h2><a href='$ser[pageurl]'>$ser[pageurl]</a></h2>"; }
?>
mysqli\u real\u escape\u字符串是mysqli
模块的一部分。您正在混合,未正确使用该函数
以下是正确操作的方法:
mysql_connect("localhost", "root", "");
mysql_select_db("searchengine");
$sql = mysql_query(sprintf(
"SELECT * FROM searchengine WHERE pagecontent LIKE '%s' LIMIT 0,%d",
'%'. mysql_real_escape_string($_GET['term']) .'%',
mysql_real_escape_string($_GET['results']))
);
while($ser = mysql_fetch_array($sql)) {
echo "<h2><a href='$ser[pageurl]'>$ser[pageurl]</a></h2>";
}
// don't forget to close connection
mysql_close();
mysql_-connect(“localhost”、“root”和“”);
mysql_select_db(“搜索引擎”);
$sql=mysql\u查询(sprintf(
“从搜索引擎中选择*,其中像“%s”这样的页面内容限制为0,%d”,
“%”。mysql_real_escape_字符串($\u GET['term'])。“%”,
mysql\u real\u escape\u字符串($\u GET['results']))
);
而($ser=mysql\u fetch\u数组($sql)){
回声“;
}
//别忘了关闭连接
mysql_close();
另一方面,mysql已经被正式弃用。请研究使用PDO
或MySQLi
库。选择一个扩展并坚持使用它。你不能把它们混在一起。(IMHO的选择非常明确。)从PHP 5.5.0开始,这个扩展的大红字就被弃用,并将在将来删除。原始MySQL API手册页面中的警告应该足以成为坚持使用MySQLi的理由。如果term
参数恰好以sprintf
识别的字母开头,您的方法将失败。文字%
符号在该函数中应加倍。。。。当然,逃逸术语
参数有点傻,但逃逸结果
参数却没有。@NiettheDarkAbsol由于占位符%d
的格式,sprintf会将$\u GET['results']
转换为数字/数字,因此无需逃逸。