我正在尝试使用 PDO 执行此查询:
UPDATE categories
SET keywords = '{"bg":["keyword1","\u0431\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438 "]}'
WHERE id = 4;
问题在于它似乎记录了没有反斜杠(“\”)的十六进制值。它确实在我的应用程序中显示,但在 PHPMyAdmin 中也没有反斜杠。
我在这个查询上使用了 exec(),并且我已经用这个全文查询尝试过它,没有任何动态/转换的变量。 PDO参数如下:
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
有人可以解释一下这里发生了什么吗?谢谢!
更新:我已经从 mysql 的 CLI 执行了这个精确的查询,然后在那里显示它,问题是一样的:所有反斜杠都消失了。所以看来这个问题与 PDO 没有任何关系,而是与 MySQL - 或者我!我的版本是5.1.53
最佳答案
\
字符在 SQL 中具有特殊含义。使用bound parameters而不是将值硬编码到用于查询的基本字符串中。
关于php - 在 mySQL 中插入带有特殊字符的 JSON 编码值失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7148698/