2011-04-12 83 views
0

我遇到了mysqli_real_escape_string和单引号的问题。mysqli_real_escape_string问题(和魔法引号关闭)

任何时候,插入的值都会包含'mysqli_real_escape_string将其替换为\',导致插入失败。

我没有魔术引号启用,这似乎是这个问题的常见原因,但仍然觉得我得到\“而不是\”,甚至\\”

谁能告诉我什么可能这里出错了吗?

谢谢。

+0

我还应该提到它逃脱其他事情的罚款。如预期的那样“变成\”并且变成\\ – 2011-04-12 17:25:16

+0

我在“我没有”的段落中看不到“\”和“\”之间的任何区别?你能在这里发生一个示例查询吗?转义函数的工作是转义SQL中任何'meta'字符。一般来说'''''命名为“大3” – 2011-04-12 17:30:27

+0

没有意识到会发生这种情况,当我写了一个双倍\第二个已被删除 我的意思是我得到的不是'或'\'(减去空格) 一个示例查询可能类似于: $ query =“INSERT INTO'test'('test'.'a','test'.'b')VALUES ('$ a','$ b'); 其中$ a和$ b已经被转义并且可以包含' – 2011-04-12 17:34:51

回答

2

考虑到这个答案,因为评论是有点限制。

所以你产生像

$a = mysqli_real_escape_string(... something ...); 
$b = mysqli_real_escape_string(... something else ...); 

$sql = "INSERT ... VALUES ('$a', '$b')"; 

查询?


好的。让我们这样说:

$a = "'"; // a is now a single quote: ' 
$escaped_a = mysql_real_escape_string($a); // should be \' now 

$sql1 = "INSERT ... VALUES ('$a' ..." 
$sql2 = "INSERT ... VALUES ('$escaped_a' ..." 

你应该

INSERT ... vALUES (''' ... 
INSERT ... VALUES ('\'' ... 

第一个是 “坏” 的结束。因为额外的报价。第二个是有效的。

+0

是的,就是这样。 – 2011-04-12 17:46:09

+1

不应该是他们的问题。你有没有比较转换前后的a/b变量?由于您在错误的地方关闭了它们,或者稍后的指令超出了您的设置,因此可能会出现魔术引号。 – 2011-04-12 19:06:24

+0

这很奇怪。该值只是'mysqli_real_escape_string之前'。在调用该函数后,该值变为\' 它似乎只是在查询准备好时出现附加\。 任何想法为什么会发生?我正在运行格式为: mysqli_query($ db,“INSERT ... VALUES('$ a','$ b')”); – 2011-04-12 19:22:14