2016-12-17 91 views
-2

我不能使用功能real_escape_string我不能使用功能real_escap_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

+0

请描述你的意思是“不能使用”。什么不起作用? – CGritton

+0

结果有什么问题?变量按预期被放入数据库。如果你没有使用'real_escape_string',你会得到一个语法错误,但是转义阻止了这个。 – Barmar

回答

-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你的表走了

当你输出回浏览器,你需要剥去斜线像下面
+0

这个功能如何保护我? – Ava

+0

这个功能如何保护我? 保护我什么? 给我例子? – Ava

+0

@Ava我编辑了我的答案来回答你 –