Php 今天,mysql\u real\u escape\u string()正在转义单引号和双引号
在CentOS上运行PHP5.3.2。就我所记得的,Php 今天,mysql\u real\u escape\u string()正在转义单引号和双引号,php,mysql,Php,Mysql,在CentOS上运行PHP5.3.2。就我所记得的,mysql\u real\u escape\u string()将只转义单引号以防止sql注入。双引号与此无关,因为在MySQL中,“不会开始或结束字符串文字 这导致反斜杠被插入到数据中!这显然是我不想要的。“确实在MySQL中启动了一个字符串。(见:) 例外情况: 如果ANSI_QUOTES SQL模式为 启用后,可以引用字符串文字 仅在单引号内 因为一个字符串在double中引用 引号被解释为 标识符 听起来像是开启了魔法语录 这篇文章详细
mysql\u real\u escape\u string()
将只转义单引号以防止sql注入。双引号与此无关,因为在MySQL中,“
不会开始或结束字符串文字
这导致反斜杠被插入到数据中!这显然是我不想要的。“
确实在MySQL中启动了一个字符串。(见:)
例外情况:
如果ANSI_QUOTES SQL模式为
启用后,可以引用字符串文字
仅在单引号内
因为一个字符串在double中引用
引号被解释为
标识符
听起来像是开启了魔法语录 这篇文章详细介绍了您的问题,以及修复方法。
最近发生了什么变化?更新的PHP版本?还有别的吗?它不会无缘无故地开始这样做?php.ini中的设置是否已更改?
mysql\u real\u escape\u string
将字符串发送到mysql服务器,让其转义数据,然后返回它发送给您的内容。此外,MySQL在其默认模式下接受“
和”
作为字符串分隔符。好吧,我现在看到了……我似乎在库的转义函数中使用了addslashes()。但是如果我将其插入数据库,即插入myTable值('BEGIN这是一个\“quote\”测试。\'Single\'END'))
反斜杠双引号是否会变成“”
或反斜杠是否会随附在数据中?这意味着当我取出数据时,我必须去掉反斜杠。\“
将转换为”
;)好的,谢谢你,尼基,我有点害怕。然后,其他一些东西导致在我的数据中插入反斜杠。(不,这不是魔术语录)谢谢,但是魔术语录没有打开。问题实际上是我的代码两次转义数据(一次在本地函数中,一次在库函数中),这导致“
变成\”
,然后变成\”
,插入数据库后变成\”
。被接受的答案消除了我的困惑。嗯,公平地说,额外的报价正是问题所在。因此,虽然我无法预测您的代码是否在其他地方执行了此操作,但我确实准确地诊断了原因,而不是代理;-)啊,很对。希望有类似问题的人会寻求这个问题&它的答案之一,并找到解决方案:}
$str = 'BEGIN This is a "quote" test. \'Single\' END';
echo $str . "\n";
echo mysql_real_escape_string($str);
// Outputs:
BEGIN This is a "quote" test. 'Single' END
BEGIN This is a \"quote\" test. \'Single\' END