我正在使用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中如何?
答案 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\'%"');