我不能使用函数real_escap_string

时间:2016-12-17 11:58:19

标签: php mysqli phpmyadmin mysql-real-escape-string

我无法使用函数real_escape_string

我的代码:

<?php include('includes/db.inc.php'); ?>
<?php

$fn = " 'Jim ";
$ln = " 'John ";

$first_name = $conn->real_escape_string($fn);
$last_name = $conn->real_escape_string($ln);

$conn->query("INSERT INTO users (first_name,last_name) 
VALUES('{$first_name}','{$last_name}') ");


echo  $first_name.' '.$last_name;

?>

输出: 在我的浏览器中:

\'Jim \'John

在我的数据库中:

id  first_name  last_name  created
1   'Jim        'John      2016-12-17 14:51:23

enter image description here

2 个答案:

答案 0 :(得分:0)

当您输出回浏览器时,您需要删除下面的斜杠:

stripslashes($first_name)

您可以从http://php.net/manual/en/function.stripslashes.php

获取更多详细信息

答案 1 :(得分:-1)

我认为您理解错了,real_escape_string()只转义了' "之类的字符,这些字符可能会使用\来破坏查询,但它不会在字符串中将其删除

所以插入数据库的内容是正确的:)

就像这样:

echo "\"this is a double quote";

如你所见,这应该是所有浏览器的错误,但由于我们使用\来转义双引号,它将被解释为字符串文字。

修改 它可以通过使mysql将'解释为文字字符串来保护sql注入。  如果你不使用real_escape_string();

会发生什么
$fn = " 'Jim ";
$ln = " 'John ";

$first_name = $fn;
$last_name = $ln;

$conn->query("INSERT INTO users (first_name,last_name) 
VALUES('{$first_name}','{$last_name}') ");

执行查询后,SQL语句将变为:

INSERT INTO users (first_name,last_name) VALUES(''Jim',''John')

这将成为SQL中的语法错误

那么如果有人输入他们的名字为'; drop table tablename;,那么查询就会变成这样

INSERT INTO users (first_name,last_name) VALUES(''; drop table tablename;',''John')

执行该查询后,taadaaa你的桌子不见了