PHP+phpMyAdmin环境下MySQL插入查询转义字符被自动移除问题
问题根因
- SQL语法默认将反斜杠
\识别为转义字符,你在插入语句中写的\"会被解析器判定为「仅插入双引号"」,用于转义的反斜杠本身不会被作为存储内容的一部分,该问题和存储引擎、字符集排序规则无关联。 - 单独更新列可以正常保存转义值,是因为更新操作中你对反斜杠做了额外转义,或是使用了参数绑定自动处理了转义逻辑,避开了SQL字符串解析时的转义消耗。
解决方案
- 手动双重转义反斜杠:如果要最终存储
test \"and\" test,插入语句中对应的取值需要写为'test \\"and\\" test',第一个反斜杠会将第二个反斜杠转义为普通字符,解析后就能同时保留反斜杠和双引号。 - 使用参数化预处理查询:不要直接拼接SQL字符串,通过PHP的PDO或mysqli扩展的预处理功能,将需要存储的原始字符串
test \"and\" test作为参数绑定到SQL语句中,数据库驱动会自动处理转义逻辑,既不会丢失反斜杠,也能避免SQL注入风险,是最优解决方案。 - 临时调整SQL模式(不推荐):执行查询前先运行
SET sql_mode = 'NO_BACKSLASH_ESCAPES';关闭反斜杠转义规则,该方案会改变当前会话的SQL解析逻辑,可能引发其他查询异常,仅可临时测试使用。
内容的提问来源于stack exchange,提问作者Apoorv dev
相关产品推荐
相关产品推荐

