我无法使用函数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
答案 0 :(得分:0)
当您输出回浏览器时,您需要删除下面的斜杠:
stripslashes($first_name)
获取更多详细信息
答案 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你的桌子不见了