在mySQL中插入带有特殊字符的JSON编码值失败

时间:2011-08-22 14:05:25

标签: php mysql utf-8 pdo json

我正在尝试使用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

1 个答案:

答案 0 :(得分:1)

\字符在SQL中具有特殊含义。使用bound parameters而不是将值硬编码到用于查询的基本字符串中。