为了账号安全,请及时绑定邮箱和手机立即绑定

PHP 中的 mysql JSON_EXTRACT 返回“Array”而不是索引元素的值

PHP 中的 mysql JSON_EXTRACT 返回“Array”而不是索引元素的值

PHP
料青山看我应如是 2023-04-21 13:11:40
我可能缺少非常基本的东西,但我不明白。我的数据库中有一个名为 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)instead ofecho $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 将单个数组元素作为单索引子数组检索,而不是将它们作为值检索。我缺少什么?
查看完整描述

1 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

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


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

  }

}

PS:我原本打算使用可变数组索引来查询数组元素。



查看完整回答
反对 回复 2023-04-21
  • 1 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信