PHP查询语句怎么查JSON字段_PHP操作json列查询技巧【技巧】-php教程

MySQL 5.7+ 的 JSON 字段需用 JSON 函数查询:JSON_CONTAINS() 查数组包含(值须加双引号),JSON_EXTRACT() 或 ->/->> 提取键值后比较(->> 自动去引号),数字可直接运算;PHP 中须防注入,路径白名单、值用参数绑定或 json_encode;高频查询应建虚拟列+索引。

MySQL 5.7+ 的 JSON 字段不能直接用 WHERE json_column = 'xxx' 比较,必须用 JSON 函数提取后再查。

用 JSON_CONTAINS() 查包含关系

适合查数组型 JSON 中是否含某个值,比如 {"tags": ["php", "mysql"]} 里有没有 "mysql":

  • JSON_CONTAINS(tags, '"mysql"') —— 注意字符串值要加双引号包裹("mysql" 是 JSON 字符串,mysql 不是)
  • JSON_CONTAINS(tags, '"php"', '$.tags') —— 指定路径更安全,避免误匹配嵌套字段
  • 不支持模糊匹配或正则,只认完整 JSON 值("PHP" ≠ "php")

用 JSON_EXTRACT() 或 -> 操作符取值后比较

适合查对象中某个键的精确值,比如 {"status": "active", "score": 95}:

  • JSON_EXTRACT(data, '$.status') = '"active"' —— 返回带引号的 JSON 字符串,所以右边也要加引号
  • data->'$.status' = '"active"' —— 简写语法,效果一样
  • data->>'$.status' = 'active' —— ->> 是去引号版本,右边直接写纯字符串
  • 对数字字段,data->>'$.score' > 90 可直接参与数值比较(MySQL 会隐式转换)

PHP 中拼接 JSON 查询要防注入

别把用户输入直接塞进 JSON 路径或值里,尤其用 -> 语法时:

立即学习“PHP免费学习笔记(深入)”;

  • 路径部分(如 '$.key')必须白名单校验,不能由用户控制;否则可能注入 '$."a"; DROP TABLE x; -- '
  • 值部分要用 PDO 参数绑定:$stmt = $pdo->prepare("SELECT * FROM t WHERE JSON_CONTAINS(meta, ?)"); $stmt->execute(['"' . $pdo->quote($tag) . '"']);
  • 用 json_encode($value, JSON_UNESCAPED_UNICODE) 生成安全 JSON 字符串再传入,比手拼引号更可靠

JSON 字段查询性能容易被忽略:没建虚拟列 + 索引的话,每次都要全表解析 JSON;->> 表达式虽方便,但无法直接走索引——真要高频查某个键,得配 GENERATED COLUMN 加普通索引。

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » PHP查询语句怎么查JSON字段_PHP操作json列查询技巧【技巧】-php教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4017434+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4017434+
  • 本周更新: 0+
  • 最后更新: 2026-03-16