首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL -如果我有一个类型为json的列,我可以根据JSON中的内容进行选择吗?

问MYSQL -如果我有一个类型为json的列,我可以根据JSON中的内容进行选择吗?
EN

Stack Overflow用户
提问于 2019-11-10 23:42:21
回答 1查看 68关注 0票数 1

我有一个保存录音的数据库,每个记录都有用户可以指定的自定义元数据,每次都会有所不同。当我根据元数据中的内容进行选择时,是否有可能呢?

代码语言:javascript
复制
<?php
require 'config.php';
require 'database_connector.php';

if (!$_SERVER['REQUEST_METHOD'] === 'GET') {
    var_dump(http_response_code(403));
    die();
}

$secret = "getSecret";
if ($secret !== $_GET['secret']) {
    var_dump(http_response_code(401));
    die();
}

$request = (object) [
    'id' => $_GET['id'], 'game_name' => $_GET['game_name'], 'gamer_tag' => $_GET['gamer_tag'], 'limit' => $_GET['limit'], 'id' => $_GET['meta_data']
];
$connection = openConnection($config);
retrieveRecordings($connection, $config, $request);
$connection->close();

function retrieveRecordings($connection, $config, $request)
{
    $stmt = $connection->prepare("SELECT * FROM $config->tablename WHERE id = ? OR game_name = ? OR gamer_tag = ? OR meta_data = ? LIMIT ?");
    $stmt->bind_param("sssss", $request->id, $request->game_name, $request->gamer_tag, $request->meta_data, $request->limit);
    if (!$stmt->execute()) {
        echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error . " \r\n";
        die();
    }
    $result = $stmt->get_result();
    if ($result->num_rows > 0) {
        while ($row = $result->fetch_assoc()) {
            $id = $row["id"];
            $game_name = $row["game_name"];
            $gamer_tag = $row["gamer_tag"];
            $recording = $row["recording"];
            $meta_data = $row["meta_data"];
            $hex = bin2hex($recording);
            echo ("response=id=" . $id . "\r\n");
            echo ("response=game_name=" . $game_name . "\r\n");
            echo ("response=gamer_tag=" . $gamer_tag . "\r\n");
            echo ("response=meta_data=" . $meta_data . "\r\n");
            echo ("response=recording" . $id . "=" . $hex . "\r\n");
        }
    } else {
        echo "0 results \r\n";
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-11 00:12:16

在JSON 5.7中,有JSON函数,因此您可以进行某些类型的搜索。有关文档和示例,请参见JSON函数参考。

有些类型的搜索过于复杂,无法使用MySQL 5.7JSON函数。因此,在MySQL 8.0中,他们引入了使用起来很复杂的表(),但是它可以将一个JSON文档转换成虚拟行和列,这样您就可以使用WHERE子句做任何事情。

但是在这两种情况下,如果用户可以存储任意元数据,比如深度嵌套的JSON数组或对象,那么就很难使其可搜索。JSON中存在哪些字段?它们在JSON中有多深?用户知道如何编写JSON搜索语法的可能性有多大?

坦率地说,我不允许用户存储任意的JSON,也不允许用户运行任意的搜索。这听起来像是要支持的噩梦,不可能优化,也可能是安全漏洞。

在这条线上,你有两次键'id'。这是行不通的,您只能在散列或对象中使用每个键一次。我想你是想让第二个'id'成为'meta_data'。

代码语言:javascript
复制
'id' => $_GET['id'], 'game_name' => $_GET['game_name'], 'gamer_tag' => $_GET['gamer_tag'],
  'limit' => $_GET['limit'], 'id' => $_GET['meta_data']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58793963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档