问题,如果你的mysql_real_escape_string是你的变量,怎么还能和你一起使用SELECT SQL查询。例如:
我的行有一个包含值's-Gravenmoer
的列。现在,用户输入's-Gravenmoer
,我将逃避此输入值以确保安全。然而,与行
保持值's-Gravenmoer
的列不会弹出,它添加了slach
在单引号之前。如果有办法使用mysql_real_escape_string ?
谢谢你们! 桑德
答案 0 :(得分:6)
您误解了SQL使用的数据转义点。它不会永久修改数据。把它想象成礼物周围的包装纸。你正在向数据库赠送一些数据,这样你就可以很好地将它包装起来(real_escape_string)。一旦它到达数据库,数据库服务器就会解开礼物(删除转义)并将“礼物”放入其藏匿处。
您添加的反斜杠在任何时候都不会出现在存储的数据中,因为它们在进行实际插入时会被数据库服务器删除。转义只是为了确保您插入到查询中的任何数据都不会“破坏”SQL语句,例如。
$name = "Miles O'Brien"; // <---note the '
$sql = "INSERT INTO people (names) VALUES ('$name')";
结果是sql:
INSERT INTO people (names) VALUES ('Miles O'Brien')
^--- oops, string terminated earlier, what's this "Brien" field/keyword?
使用real_escape_string,您的查询看起来像
... VALUES ('Miles O\'Brien')
^^---no longer an SQL string delimiter, treat it like any other char now.