我有这张table
ID|name
----------------
1 |My Shop No. \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
,我可以看到数据库正在接收此查询:
SELECT `id` FROM shops WHERE `name` = 'My Shop No. \\6\\'
当我在phpmyadmin中直接使用这个查询时,它也不会返回任何结果。
我怎么处理这种案子?
绝对没有改变数据库中数据的选项。
1条答案
按热度按时间t3psigkw1#
许多产品(php、mysql等)使用反斜杠作为转义字符。
就其本身而言,它通常是通过对后面的角色做一些事情来消耗的。例如,
a\tb
把信给你a
以及b
由制表符分隔(通常的解释是\t
).将反斜杠加倍
\\xyz
通常是这样解释的:第一个反斜杠逃逸第二个,所以你得到\xyz
.如果您的字符串经过多个代码层(例如,pdo加mysql),那么您可能需要两倍的反斜杠,因为每一层都会发生变化
\\
进入\
.另一个诊断工具是
SELECT HEX(col) ...
查看数据库中存储的内容。示例:返回代码:
现在将成对的反斜杠转换为单个反斜杠,然后将字符串交给下一个。
(在这些上下文中,单引号和双引号的作用是相同的。)