php中的mysql json提取返回“array”而不是索引元素的值

hsvhsicv  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(312)

很基本的东西我可能错过了,但我不明白。在我的数据库中有一个名为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将单个数组元素作为一个索引子数组进行检索,而不是作为值进行检索。。我错过了什么?

a8jjtwal

a8jjtwal1#

好的,当我使用别名作为查询结果的输出列的名称,并使用 ->> 而不是 -> 它成功了,就像这样:

$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'];
  }
}

p、 答:我最初计划使用可变数组索引查询数组元素。多亏了这篇文章https://medium.com/aubergine-solutions/working-with-mysql-json-data-type-with-prepared-statements-using-it-in-go-and-resolving-the-15ef14974c48,我知道如何做到这一点,所以我认为这篇文章也可以帮助其他有类似顾虑/想法的人。

相关问题