首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDO:从包含反斜杠的DB中选择字段

PDO:从包含反斜杠的DB中选择字段
EN

Stack Overflow用户
提问于 2018-11-15 21:04:31
回答 1查看 71关注 0票数 1

我有一张这张桌子的内容

代码语言:javascript
复制
ID|name
----------------
1 |My Shop No. \6\

(不要问为什么6在反斜杠内,我不知道,我只需要处理它)

我尝试从我的表中选择这个特定值。我的查询如下所示:

代码语言:javascript
复制
$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语句时,我可以看到数据库正在接收这个查询:

代码语言:javascript
复制
SELECT `id` FROM shops WHERE `name` = 'My Shop No. \\6\\'

当我在PHPMyAdmin中直接使用这个查询时,它也不返回任何结果。

我该如何处理这种情况呢?

绝对没有更改数据库中数据的选项。

EN

回答 1

Stack Overflow用户

发布于 2018-11-16 05:10:09

许多产品(PHP、MySQL等)使用反斜杠作为转义字符。

就其本身而言,它通常是通过对它后面的角色执行某些操作来消耗的。例如,a\tb提供用制表符分隔的字母ab (通常解释为\t)。

双反斜杠\\xyz通常是这样解释的:第一个反斜杠转义第二个,所以你得到\xyz

如果字符串经过多层代码(例如,PDO加上MySQL),则可能需要两倍的反斜杠,因为每一层都会将\\转换为\

另一个诊断工具是SELECT HEX(col) ...,用于查看数据库中存储的内容。示例:

代码语言:javascript
复制
610962    a\tb  -- a=61, tab=09, b=62
615C7462  a\\tb -- a=61, \=5C, t=74, b=62 

回到你的代码:

代码语言:javascript
复制
$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\\'

现在,成对的反斜杠被转换为单反斜杠,然后字符串被传递给下一个。

(在这些上下文中,单引号和双引号的作用相同。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53320127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档