【问题标题】:mysql JSON_EXTRACT in PHP returning "Array" instead of indexed element's valuePHP中的mysql JSON_EXTRACT返回“数组”而不是索引元素的值
【发布时间】:2020-09-13 17:53:46
【问题描述】:

我可能缺少非常基本的东西,但我不明白。我的数据库中有一个名为 mus_translated_languages 的表,其中有一个 json 数据类型列(六条记录),其值始终位于以下结构中:

["GERMAN","ENGLISH","FRENCH"]

当我使用以下代码时:

$sql = 'SELECT labels->"$[1]" FROM mus_translated_languages';
$result = mysqli_query( $conn, $sql );
if ( mysqli_num_rows( $result ) > 0 ) {
  while ( $row = mysqli_fetch_assoc( $result ) ) {
    echo $row;
  }
}

我没有得到六种对应的语言,而是得到以下输出:

ArrayArrayArrayArrayArrayArray

所以看起来我的代码无法读取输出值,而只能读取其数据类型。我错过了什么??

更新

我在上面的代码中使用var_dump($row)而不是echo $row来查看我们有什么,服务器返回:

array(1) { ["labels->"$[1]""]=> string(9) ""Deutsch"" } array(1) { ["labels->"$[1]""]=> string(10) ""Englisch"" }

以此类推,以此类推,对于 6 个数组/记录。然后我用了:

foreach ($row as $key => $value) {
      echo $value;
    }

而不是上面代码中的echo $row,得到了我想要的。然而,我觉得这不是它应该的方式。 PHP 将单个数组元素检索为单索引子数组,而不是将它们作为值检索。我缺少什么?

【问题讨论】:

  • 你试过mysqli_fetch_array()吗? php.net/manual/en/mysqli-result.fetch-array.php
  • 是的,返回的结果完全相同。在更新中查看我所做的,但我觉得这不是习惯性的,而且有问题..
  • 怎么样:echo json_decode($row);
  • 解码和编码都返回一个空答案

标签: php mysql sql json json-extract


【解决方案1】:

好的,所以当我使用别名作为查询结果的输出列的名称,并通过使用 ->> 而不是 -> 取消引用查询产生的字符串时,它起作用了,如下所示:

$sql = 'SELECT labels->>"$[2]" AS label FROM mus_translated_languages';
$result = mysqli_query( $conn, $sql );
if ( mysqli_num_rows( $result ) > 0 ) {
  while ( $row = mysqli_fetch_assoc( $result ) ) {
    echo $row['label'];
  }
}

附: :我最初打算使用可变数组索引来查询数组元素。感谢这篇文章https://medium.com/aubergine-solutions/working-with-mysql-json-data-type-with-prepared-statements-using-it-in-go-and-resolving-the-15ef14974c48,我能够弄清楚如何做到这一点,所以我认为这篇文章也可以帮助其他有类似问题/想法的人。

【讨论】:

    猜你喜欢
    • 2019-09-05
    • 2021-05-23
    • 2011-10-25
    • 2012-11-13
    • 1970-01-01
    • 2019-11-21
    • 2014-05-23
    • 2010-11-12
    • 2021-08-02
    相关资源
    最近更新 更多