Mysql真正的转义字符串和SQL选择

时间:2012-10-16 20:47:43

标签: php mysql sql

问题,如果你的mysql_real_escape_string是你的变量,怎么还能和你一起使用SELECT SQL查询。例如:

我的行有一个包含值's-Gravenmoer的列。现在,用户输入's-Gravenmoer,我将逃避此输入值以确保安全。然而,与行 保持值's-Gravenmoer的列不会弹出,它添加了slach 在单引号之前。如果有办法使用mysql_real_escape_string

谢谢你们! 桑德

1 个答案:

答案 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.