Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysqli\u real\u escape\u字符串不起作用?_Php_Mysql_Mysqli_Phpmyadmin - Fatal编程技术网

Php mysqli\u real\u escape\u字符串不起作用?

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

我得到了这个简单的搜索引擎代码,但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 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']
转换为数字/数字,因此无需逃逸。