Php 为什么我的mysql\u real\u escape\u字符串不起作用?

Php 为什么我的mysql\u real\u escape\u字符串不起作用?,php,mysql,Php,Mysql,我读过很多关于SQL注入的书。但它不适用于此代码: $inputform= $_GET["password"]; $query = "INSERT INTO user(password) VALUES ('".mysql_real_escape_string($inputform)."')"; 例如,我使用这个例子:O'Conner。当我提交它并查看我的表格时,有O'Connor而不是O'Conner 谢谢引号被转义,以便MySQL不会将其解释为字符串分隔符。反斜杠不会存储在数据库中,也不

我读过很多关于SQL注入的书。但它不适用于此代码:

$inputform= $_GET["password"];
$query = "INSERT INTO user(password) VALUES ('".mysql_real_escape_string($inputform)."')";  
例如,我使用这个例子:
O'Conner
。当我提交它并查看我的表格时,有
O'Connor
而不是
O'Conner


谢谢

引号被转义,以便MySQL不会将其解释为字符串分隔符。反斜杠不会存储在数据库中,也不应该存储在数据库中。您看到的是正确的、预期的和记录在案的行为


顺便说一句,最好的解决方案是使用PDO和参数化查询。

mysql\u real\u escape\u string()将值转义,以便mysql的SQL解析器在存储值时可以正确解释值,如果您在表中获得
O'Connor
,它实际上不会作为转义字符串存储在数据库中,它工作正常。但是尝试一下echo$query,您将看到转义的结果。

效果很好!您的数据库中不应该有“O\\ Conner”,而应该只有在查询中。如果它不起作用,您的查询将不会成功,因为'in O'Conner将破坏您的查询。

当您查看表时,它应该是
O'Connor
-这意味着字符串在SQL中被正确转义。如果它不是由
mysql\u real\u escape\u string
转义的,那么您可能会遇到语法错误

查询结果将为:

INSERT INTO user(password) VALUES ('O'Connor)

如果希望在数据库中使用反斜杠,请在将其传递给
mysql\u real\u escape\u string
之前尝试使用反斜杠,但您可能不需要。

+1同时提及参数化查询()