我有一张这张桌子的内容
ID|name
----------------
1 |My Shop No. \6\(不要问为什么6在反斜杠内,我不知道,我只需要处理它)
我尝试从我的表中选择这个特定值。我的查询如下所示:
$sql = "SELECT `id` FROM shops WHERE `name` = :name";
$params = array(':name' => "My Shop No. \6\");
$this->fetchOne($sql, $params); // the binding happens in my mysql class这个查询没有返回任何数据,它声明没有条目。当我使用Neor Profiler SQL监视我的SQL语句时,我可以看到数据库正在接收这个查询:
SELECT `id` FROM shops WHERE `name` = 'My Shop No. \\6\\'当我在PHPMyAdmin中直接使用这个查询时,它也不返回任何结果。
我该如何处理这种情况呢?
绝对没有更改数据库中数据的选项。
发布于 2018-11-16 05:10:09
许多产品(PHP、MySQL等)使用反斜杠作为转义字符。
就其本身而言,它通常是通过对它后面的角色执行某些操作来消耗的。例如,a\tb提供用制表符分隔的字母a和b (通常解释为\t)。
双反斜杠\\xyz通常是这样解释的:第一个反斜杠转义第二个,所以你得到\xyz。
如果字符串经过多层代码(例如,PDO加上MySQL),则可能需要两倍的反斜杠,因为每一层都会将\\转换为\。
另一个诊断工具是SELECT HEX(col) ...,用于查看数据库中存储的内容。示例:
610962 a\tb -- a=61, tab=09, b=62
615C7462 a\\tb -- a=61, \=5C, t=74, b=62 回到你的代码:
$params = array(':name' => "My Shop No. \6\");
\6 is probably treated as just "6" (not everything has some escaped meaning)
\" possibly caused a syntax error. Normally this is now to get a " inside a string
'My Shop No. \\6\\'现在,成对的反斜杠被转换为单反斜杠,然后字符串被传递给下一个。
(在这些上下文中,单引号和双引号的作用相同。)
https://stackoverflow.com/questions/53320127
复制相似问题