Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用MySQL在JSON数组中搜索_Php_Mysql_Json - Fatal编程技术网

Php 使用MySQL在JSON数组中搜索

Php 使用MySQL在JSON数组中搜索,php,mysql,json,Php,Mysql,Json,我想在JSON数组中搜索某个值,但只得到一条错误消息 例如,我想在JSON数组中搜索某个国家,如果数组中包含国家id,则只选择该用户的user\u id 我尝试使用JSON\u CONTAINS: <?php $query = "SELECT user_id FROM user WHERE JSON_CONTAINS(user_info, 'us', '$.country')"; $row = mysqli_query($conn, $que

我想在JSON数组中搜索某个值,但只得到一条错误消息

例如,我想在JSON数组中搜索某个国家,如果数组中包含国家id,则只选择该用户的
user\u id

我尝试使用JSON\u CONTAINS:

<?php 
    $query = "SELECT user_id FROM user 
              WHERE JSON_CONTAINS(user_info, 'us', '$.country')";
    $row = mysqli_query($conn, $query) or die("Error: ".mysqli_error($conn));;
    while($results = mysqli_fetch_array($row )){
        echo $results['user_id']."<br>";
    }
?>
我的错误消息

错误:函数JSON_的参数2中的JSON文本无效,在位置0处包含:“无效值”

传递字符串时,第二个参数应为有效的JSON文档

如果目标或候选对象不是有效的JSON文档,则会发生错误

使用
'[“us”]
而不是
“us”

但是,如果我理解正确的话,您正在尝试查找那些JSON文档,其中对应于
country
键的数组包含
'us'
<代码>JSON_CONTAINS()不能直接用于实现这一点。您将需要使用和的组合。请注意,您只是在查找匹配项,因此第二个参数可以是
Json\u Search()函数中的
one

SET @jsn := '{"language":["en","fr"],"country":["us"]}';

SELECT 
  JSON_SEARCH(JSON_EXTRACT(@jsn, '$.country'), 'one', 'us');

| JSON_SEARCH(JSON_EXTRACT(@jsn, '$.country'), 'one', 'us') |
| --------------------------------------------------------- |
| "$[0]"                                                    |

现在,
Json\u Search
如果任何Json\u doc、Search\u str或path参数为NULL,则返回NULL;文档中不存在路径;或找不到搜索字符串。因此,您需要在
WHERE
子句中使用
isnotnull
。请改用以下查询:

SELECT user_id 
FROM user 
WHERE JSON_SEARCH(JSON_EXTRACT(user_info, '$.country'), 'one', 'us') IS NOT NULL
传递字符串时,第二个参数应为有效的JSON文档

如果目标或候选对象不是有效的JSON文档,则会发生错误

使用
'[“us”]
而不是
“us”

但是,如果我理解正确的话,您正在尝试查找那些JSON文档,其中对应于
country
键的数组包含
'us'
<代码>JSON_CONTAINS()
不能直接用于实现这一点。您将需要使用和的组合。请注意,您只是在查找匹配项,因此第二个参数可以是
Json\u Search()函数中的
one

SET @jsn := '{"language":["en","fr"],"country":["us"]}';

SELECT 
  JSON_SEARCH(JSON_EXTRACT(@jsn, '$.country'), 'one', 'us');

| JSON_SEARCH(JSON_EXTRACT(@jsn, '$.country'), 'one', 'us') |
| --------------------------------------------------------- |
| "$[0]"                                                    |

现在,
Json\u Search
如果任何Json\u doc、Search\u str或path参数为NULL,则返回NULL;文档中不存在路径;或找不到搜索字符串。因此,您需要在
WHERE
子句中使用
isnotnull
。请改用以下查询:

SELECT user_id 
FROM user 
WHERE JSON_SEARCH(JSON_EXTRACT(user_info, '$.country'), 'one', 'us') IS NOT NULL

使用PHP进行搜索与使用mysql进行搜索没有什么不同。您必须参考与json相关的mysql文档,其中包含
$。country
<这似乎是一个输入错误,并且没有显示它的定义位置(as)。
['user\u id']
<其中的空格计为一个字符,您还应该得到一个关于它的未定义索引警告。不建议像这样在其中存储数据,使用逗号分隔的值。有很多方法可以规范化数据库,用PHP搜索和用mysql搜索没有什么不同。您必须参考与json相关的mysql文档,其中包含
$。country
<这似乎是一个输入错误,并且没有显示它的定义位置(as)。
['user\u id']
<其中的空格计为一个字符,您还应该得到一个关于它的未定义索引警告。不建议像这样在其中存储数据,使用逗号分隔的值。有很多方法可以使数据库正常化。你错过了一些东西。看我在他们的问题下留下的评论,关于未定义索引;-)@FunkFortyNiner可能会有更多的错误;我不是在评估PHP代码,而是建议修复MySQL查询,因为您遗漏了一些东西。看我在他们的问题下留下的评论,关于未定义索引;-)@FunkFortyNiner可能会有更多的错误;我不是在评估PHP代码,而是建议对MySQL查询进行修复