【问题标题】:Query where mySQL table with JSON column in ci's用 ci 中的 JSON 列查询 mySQL 表的位置
【发布时间】:2020-01-17 08:15:43
【问题描述】:

我正在使用 codeigniter,并且我在表名 submit 的列 (tags_json) 上有一个数字列表(例如 ['1', '2', '12', '42']),我想检查数字(例如 '2 ') 在tags_json,为了显示数据行的内容。

我试过的代码是:

$this->db->select('*', FALSE);
$this->db->where("JSON_CONTAINS(tags_json,'[2]'");
$Query = $this->db->get('submit');
echo $Query->num_rows();

结果是:

错误号:1064 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在第 3 行的 '' 附近使用的正确语法

SELECT * FROM submit WHERE JSON_CONTAINS(tags_json,'[2]' 为空 文件名:控制器/Home.php 行号:281

在 CI 中的情况如何?

【问题讨论】:

  • 尝试将参数 null、false 作为第二个和第三个
  • 您缺少用于关闭JSON_CONTAINS() 调用的括号。应该是$this->db->where("JSON_CONTAINS(tags_json,'[2]')");
  • 试试this->db->where("JSON_CONTAINS(tags_json,'[2]')", NULL, FALSE);
  • @GMB 我给出这个错误:Error Number: 1305 FUNCTION grsd1_db.JSON_CONTAINS does not exist SELECT * FROM 'submit' WHERE JSON_CONTAINS(tags_json,'[2]') IS NULL
  • 您使用的是哪个版本的 MySQL?如果我没记错的话,JSON_CONTAINS() 是在 5.7 中添加的。

标签: php mysql json codeigniter


【解决方案1】:

由于您的服务器不支持 JSON 系列函数 JSON_CONTAINS,您可以尝试一个很好的旧 LIKE 语句

$this->db->where('tags_json LIKE "%\'2\'%"');

【讨论】:

    【解决方案2】:

    我找到了解决您问题的方法。使用此代码...

    $this->db->select('*');
    $this->db->where("JSON_CONTAINS(tags_json, JSON_ARRAY('2'))");
    $Query = $this->db->get('submit');
    echo $Query->num_rows();
    

    如果没有找到,它将输出 10

    如果它会给你这个错误

    函数 json_contains 的参数 1 中的 JSON 文本无效:“值无效。”在位置 1。

    SELECT * FROM submit WHERE JSON_CONTAINS(tags_json, JSON_ARRAY('2'))

    这是因为你的 json 数组是无效的,所以请确保你有这种格式

    ["1", "2", "12", "42"]
    

    或者你可以像这样[1, 2, 12, 42] 然后打电话给JSON_ARRAY(2)

    希望有帮助。

    【讨论】:

    • 我给这个错误:Error Number: 1305 FUNCTION grsd1.JSON_CONTAINS does not exist SELECT * FROM 'submit' WHERE JSON_CONTAINS(tags_json, JSON_ARRAY('2')),MySQL的版本是5.5,这个版本(mysql 5.5)的解决方案是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    • 2019-02-17
    • 2018-08-30
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多