MySQL PHP Escape String'\' - 为什么它没有用反斜杠保存在数据库中?

KDa*_*awg 6 php mysql escaping backslash

对转义字符串以及它如何存储在数据库中感到困惑

在我的MySQL调用中,我使用反斜杠转义字符串:

UPDATE `TABLE` SET `PERSONAL_BELONGINGS` = 'Tom\'s things'
Run Code Online (Sandbox Code Playgroud)

但当我查看phpadmin时 - 值保存如下:

|Tom's things|
Run Code Online (Sandbox Code Playgroud)

为什么反斜杠没有保存到数据库中?当我将此值读入javascript然后尝试传递它时,这会导致问题 - 我的javascript字符串将终止.这就是我开始逃避角色的原因.

为什么MySQL在保存到数据库之前删除'\'反斜杠?

如果没有用'\'保存在数据库中 - 那么当你将它作为字符串传递回javascript时,最好的方法是什么呢?当作为字符串传递给javascript时再次转义它?

Joa*_*son 8

首先让我说,你应该不是真的存储在任何特定的数据库中的数据转义格式,因此当你需要提取它以另一种格式或更高版本的搜索数据由于某种原因,后悔就晚了.您现在保存的格式看起来不错,在将数据传递给实际的Javascript时,在代码中添加Javascript的反斜杠更好.

现在这就是它目前表现得像它的原因;

在字符串中'Tom\'s things',\'是一个字符转义序列,实际上只用于让MySQL理解如何解析SQL字符串,它永远不会保存到数据库中.

'你在开始显示的SQL语句中转义字符的原因是,否则MySQL无法知道字符串不会以单引号结束'Tom.

如果您使用MySQLi或PDO预处理语句而不是自己构建SQL语句,MySQL将让您保存完全不变的值,而不必逃避任何事情.这绝对是首选方案,因为不支持预编译语句的MySQL API.