mysql JSON_EXTRACT in PHP 返回 "Array" 而不是索引元素的值
mysql JSON_EXTRACT in PHP returning "Array" instead of indexed element's value
我可能缺少非常基本的东西,但我不明白。我的数据库中有一个名为 mus_translated_languages 的 table,其中有一个 json 数据类型列(6 条记录),其值始终在以下结构中:
["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 将单个数组元素作为单索引子数组检索,而不是将它们作为值检索。我缺少什么?
好吧,所以当我使用别名作为查询结果的输出列的名称,并使用 ->>
而不是 ->
取消对查询结果字符串的引用时,它起作用了,像这样:
$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.S。 :我原本打算使用可变数组索引来查询数组元素。多亏了这个 post https://medium.com/aubergine-solutions/working-with-mysql-json-data-type-with-prepared-statements-using-it-in-go-and-resolving-the-15ef14974c48,我才能够弄清楚该怎么做,所以我认为这个 post 也可以帮助其他有类似问题/想法的人。
我可能缺少非常基本的东西,但我不明白。我的数据库中有一个名为 mus_translated_languages 的 table,其中有一个 json 数据类型列(6 条记录),其值始终在以下结构中:
["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 将单个数组元素作为单索引子数组检索,而不是将它们作为值检索。我缺少什么?
好吧,所以当我使用别名作为查询结果的输出列的名称,并使用 ->>
而不是 ->
取消对查询结果字符串的引用时,它起作用了,像这样:
$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.S。 :我原本打算使用可变数组索引来查询数组元素。多亏了这个 post https://medium.com/aubergine-solutions/working-with-mysql-json-data-type-with-prepared-statements-using-it-in-go-and-resolving-the-15ef14974c48,我才能够弄清楚该怎么做,所以我认为这个 post 也可以帮助其他有类似问题/想法的人。