查询CI中带有JSON列的mySQL表

时间:2019-09-16 13:18:12

标签: php mysql json codeigniter

我正在使用codeigniter,并且在表名['1', '2', '12', '42']的列(tags_json)上有一个数字列表(例如submit),我想检查是否数字(例如'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在JSON_CONTAINS(tags_json,'[2]'为NULL       文件名:controllers / Home.php       行号:281

在CI中如何?

2 个答案:

答案 0 :(得分:0)

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

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

如果找不到任何内容,它将输出 1 0

如果它会给您这个错误

  

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

     

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

这是因为您的json数组无效,因此请确保您使用这种格式

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

或者您也可以像这样[1, 2, 12, 42]然后致电JSON_ARRAY(2)

希望有帮助。

答案 1 :(得分:0)

由于服务器不支持JSON系列功能JSON_CONTAINS,因此您可以尝试使用旧的LIKE语句

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