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

标签 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

最佳答案

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

关于php - 在 mySQL 中插入带有特殊字符的 JSON 编码值失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7148698/

相关文章:

php - 如何在 ng-repeat 内的 angularJs 中生成发票?

android - 如何使用MySQL数据库在android中显示图表

google-chrome-extension - Chrome 说我的内容脚本不是 UTF-8

php - 如何比较每个列名对的两个最近记录

php - 解析 useragent 字符串的正则表达式

php - WordPress:如果 is_page() 而不是 is_front_page()

mysql - 使用正则表达式将一列拆分为多列

php - 如何更改 echo 错误查询以重定向 404.php?

java - Maven 测试中的编码无法正常工作

php - 通用且干净的 UTF-8 编码 (PHP)