【发布时间】:2019-04-18 14:17:36
【问题描述】:
我有这个内容的桌子
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 监控我的 SQL 语句时,我可以看到数据库正在接收这个查询:
SELECT `id` FROM shops WHERE `name` = 'My Shop No. \\6\\'
当我直接在 PHPMyAdmin 中使用这个查询时,它也没有返回任何结果。
我该如何处理这种情况?
绝对没有选项可以更改数据库中的数据。
【问题讨论】:
-
反斜杠在 PHP 字符串中也有含义。试试
var_dump($params)看看我的意思。如果事实上你在 SQL 中做对了,而且语法是一样的。 -
好的,问题是我很难创建一个示例案例。字符串值实际上来自 URL 参数。你认为这仍然是一个问题吗?在将它们传递给查询之前,我还尝试用双反斜杠替换反斜杠。但这根本没有帮助。
-
我做了一个 var_dump。输出是通过 url 接收到的字符串
-
字符串文字是完全不同的东西。信任
var_dump()。如果 URL 中的单个斜杠在var_dump($_GET)处加倍,则您遇到了不同的问题。 -
它不会在 var_dump 中翻倍。它只在
Neor Profiler/ MySQL 中翻了一番。在那之前,字符串只有一个反斜杠