我有一个保存录音的数据库,每个记录都有用户可以指定的自定义元数据,每次都会有所不同。当我根据元数据中的内容进行选择时,是否有可能呢?
<?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";
}
}发布于 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'。
'id' => $_GET['id'], 'game_name' => $_GET['game_name'], 'gamer_tag' => $_GET['gamer_tag'],
'limit' => $_GET['limit'], 'id' => $_GET['meta_data']https://stackoverflow.com/questions/58793963
复制相似问题