Php 为什么我的mysql\u real\u escape\u字符串不起作用?
我读过很多关于SQL注入的书。但它不适用于此代码: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不会将其解释为字符串分隔符。反斜杠不会存储在数据库中,也不
$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同时提及参数化查询()