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

我的行有一个列,其中包含值's-Gravenmoer。现在,用户键入's-Gravenmoer,出于安全考虑,我将转义此输入值。但是,与
拥有值's-Gravenmoer的列永远不会弹出,它增加了延迟
单引号之前。如果有办法用mysql_real_escape_string做到这一点?

谢谢你们!
桑德

最佳答案

您误解了为SQL使用转义数据的观点。它不会永久修改数据。可以将其视为礼物包装纸。您正在向数据库提供一些数据,这样就可以很好地将其包装起来(real_escape_string)。一旦到达数据库,数据库服务器就会解开礼物(移除转义)并将“礼物”放入其藏匿处。

您添加的EVER反斜杠绝不会出现在存储的数据中,因为DB服务器在进行实际插入时会将其删除。转义纯粹是为了确保您插入查询中的任何数据都不会“破坏” 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.

10-08 09:14
查看更多