0

问题,如果您使用 mysql_real_escape_string 您的变量,它如何仍然与您一起使用 SELECT SQL 查询。例如:

我的行有一列包含 value 's-Gravenmoer。现在用户's-Gravenmoer输入,为了安全起见,我将转义这个输入的值。但是,包含值's-Gravenmoer的列永远不会弹出,它在单引号之前添加了斜线。如果有办法用 mysql_real_escape_string做到这一点?

多谢你们!桑德

4

1 回答 1

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.
于 2012-10-16T20:56:13.277 回答