如何在PHP中使用mysql_real_escape_string函数

|| 因此,在我编写的此程序中,我实际上是使用表单从用户那里获取一个SQL查询。然后,我继续在数据库上运行该查询。 我知道不要“信任”用户输入,因此我想对输入进行清理。我正在尝试使用
mysql_real_escape_string
,但未能成功使用它。 输入以下内容,这就是我要尝试的内容:
select * from Actor;
//\"query\" is the input string: 
$clean_string = mysql_real_escape_string($query, $db_connection); 
$rs = mysql_query($clean_string, $db_connection); 
if (!$rs) 
{ 
    echo \"Invalid input!\"; 
} 
这总是给我   \“输入无效!\” 错误。 当我取出
clean_string
部分并仅对查询运行
mysql_query
时,   \“无效   输入\“ 信息不输出。相反,当我这样做时:
$rs = mysql_query($query, $db_connection); 
if (!$rs) 
{ 
   echo \"Invalid input!\"; 
} 
它不输出   \“输入无效\”。 但是,我需要使用“ 0”功能。我究竟做错了什么? 更新: 给定
select * from Actor;
作为输入,我发现了以下内容。 我已经使用echo语句 发现在清除之前,该字符串包含以下值:
select * from Actor;
哪个是正确的。但是,经过消毒后,它不正确 值
select *\\r\\nfrom Actor;
,因此出现错误消息。为什么是
mysql_real_escape_string
正在这样做?     
已邀请:
将其用于查询中的实际值,而不是整个查询字符串本身。 例:
$username = mysql_real_escape_string($_POST[\'username\']);
$query = \"update table set username=\'$username\' ...\";
$rs = mysql_query($query);
    
不要使用过时的mysql扩展名,而是切换到PDO。准备好的语句参数不容易注入,因为它们将值与语句分开。预备语句和PDO具有其他优点,包括性能,易用性和其他功能。如果需要教程,请尝试“使用PHP和PDO编写MySQL脚本”。     
mysql_real_escape_string()
是字符串转义功能。它不会使任何输入安全,只是使字符串值安全,不能与LIKE子句一起使用,并且整数仍需要以不同的方式处理。 一个更简单,更通用的示例可能是:
 $post = array_map(\"mysql_real_escape_string\", $_POST);
 // cleans all input variables at once

 mysql_query(\"SELECT * FROM tbl WHERE id=\'$post[id]\' 
                OR name=\'$post[name]\' OR mtime<\'$post[mtime]\' \");
 // uses escaped $post rather than the raw $_POST variables
请注意,对于SQL字符串,每个变量如何仍必须用“ 14”单引号引起来。 (否则转义将毫无意义。)     
您应使用“ 0”将参数转义到查询,而不是整个查询本身。 例如,假设您有两个从表单接收的变量。然后,您的代码将如下所示:
$Query = sprintf(
    \'INSERT INTO SomeTable VALUES(\"%s\", \"%s\")\', 
    mysql_real_escape_string($_POST[\'a\'], $DBConnection),
    mysql_real_escape_string($_POST[\'b\'], $DBConnection)
);

$Result = mysql_query($Query, $DBConnection);
    
手动mysql_real_escape_string()   转义字符串中的特殊字符   用于SQL语句 因此,您不能只对数据进行转义,因为它将对所有不安全的字符(如引号(查询的有效部分))进行转义。 如果您尝试这样的操作(以逃避整个查询)
echo mysql_real_escape_string(\"INSERT INTO some_table VALUES (\'xyz\', \'abc\', \'123\');\");
输出是   插入some_table值(\\\'xyz \\\',   \\\'abc \\\',\\\'123 \\\'); 这不再是有效的查询。     
这对我有用。狼人(wtec.co)
<?php
// add data to db
require_once(\'../admin/connect.php\');

$mysqli = new mysqli($servername, $username, $password, $dbname);

/* check connection */
if (mysqli_connect_errno()) {
    printf(\"Connect failed: %s\\n\", mysqli_connect_error());
    exit();
}

$post = $mysqli->real_escape_string($_POST[\'name\']);
$title = $mysqli->real_escape_string($_POST[\'message\']);


/* this query with escaped $post,$title will work */
if ($mysqli->query(\"INSERT into press (title, post) VALUES (\'$post\', \'$title\')\")) {
    printf(\"%d Row inserted.\\n\", $mysqli->affected_rows);
}

$mysqli->close();


//header(\"location:../admin\"); 
?>
    

要回复问题请先登录注册