我遇到了mysqli_real_escape_string和单引号的问题。mysqli_real_escape_string问题(和魔法引号关闭)
任何时候,插入的值都会包含'mysqli_real_escape_string将其替换为\',导致插入失败。
我没有魔术引号启用,这似乎是这个问题的常见原因,但仍然觉得我得到\“而不是\”,甚至\\”
谁能告诉我什么可能这里出错了吗?
谢谢。
我遇到了mysqli_real_escape_string和单引号的问题。mysqli_real_escape_string问题(和魔法引号关闭)
任何时候,插入的值都会包含'mysqli_real_escape_string将其替换为\',导致插入失败。
我没有魔术引号启用,这似乎是这个问题的常见原因,但仍然觉得我得到\“而不是\”,甚至\\”
谁能告诉我什么可能这里出错了吗?
谢谢。
考虑到这个答案,因为评论是有点限制。
所以你产生像
$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 ('\'' ...
第一个是 “坏” 的结束。因为额外的报价。第二个是有效的。
是的,就是这样。 – 2011-04-12 17:46:09
不应该是他们的问题。你有没有比较转换前后的a/b变量?由于您在错误的地方关闭了它们,或者稍后的指令超出了您的设置,因此可能会出现魔术引号。 – 2011-04-12 19:06:24
这很奇怪。该值只是'mysqli_real_escape_string之前'。在调用该函数后,该值变为\' 它似乎只是在查询准备好时出现附加\。 任何想法为什么会发生?我正在运行格式为: mysqli_query($ db,“INSERT ... VALUES('$ a','$ b')”); – 2011-04-12 19:22:14
我还应该提到它逃脱其他事情的罚款。如预期的那样“变成\”并且变成\\ – 2011-04-12 17:25:16
我在“我没有”的段落中看不到“\”和“\”之间的任何区别?你能在这里发生一个示例查询吗?转义函数的工作是转义SQL中任何'meta'字符。一般来说'''''命名为“大3” – 2011-04-12 17:30:27
没有意识到会发生这种情况,当我写了一个双倍\第二个已被删除 我的意思是我得到的不是'或'\'(减去空格) 一个示例查询可能类似于: $ query =“INSERT INTO'test'('test'.'a','test'.'b')VALUES ('$ a','$ b'); 其中$ a和$ b已经被转义并且可以包含' – 2011-04-12 17:34:51