首页 > 解决方案 > 尝试在 Amazon AWS 上的 mySQL 数据库上使用 JSON_OBJECT 函数

问题描述

我在将结果集转换为 JSON 时发现了这个问题

我对使用这个功能很感兴趣(这就是为什么我首先搜索并找到了这篇文章)但是当我尝试它时,没有返回任何结果。

提供的页面上的答案指出,您需要使用此功能的最低 mySQL 版本号(5.7)。

所以我的问题是:

  1. 有没有办法从 RDS 屏幕(或其他方式)找到我设置数据库的 MySQL 版本号?

  2. 假设版本是合规的,我的 PHP PDO 查询的工作方式是否完全相同?如果没有,是否有另一种方法可以使用或不使用 PHP PDO?

标签: phpmysqljsonamazon-web-servicespdo

解决方案


您可以使用以下查询验证您的 MySQL 服务器版本:

SELECT VERSION();

如果使用 JSON_OBJECT(),结果将作为字符串返回到 PDO,其中恰好包含 JSON 格式的结果。

$stmt = $pdo->prepare("SELECT JSON_OBJECT('id', id, 'name', name, 'age', age) as doc FROM person");
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
var_dump($results);

输出:

array(1) {
  [0]=>
  array(1) {
    ["doc"]=>
    string(37) "{"id": 1, "age": 14, "name": "Harry"}"
  }
}

如果 MySQL 不支持 JSON_OBJECT(),您可以获取常规结果集作为关联数组,然后使用 PHP 函数(如 json_encode())将该数组转换为 JSON。

$stmt = $pdo->prepare("SELECT id, name, age FROM person");
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
$doc = json_encode($results);
echo $doc . "\n";

输出:

[{"id":"1","name":"Harry","age":"14"}]

推荐阅读