php - PHP中的mysql JSON_EXTRACT返回“数组”而不是索引元素的值
问题描述
我可能缺少非常基本的东西,但我不明白。我的数据库中有一个名为 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 将单个数组元素作为单索引子数组检索,而不是将它们作为值检索。我错过了什么?
解决方案
好的,所以当我为查询结果的输出列的名称使用别名时,并通过使用->>
而不是->
它来取消对查询产生的字符串的引用,如下所示:
$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:我最初计划使用可变数组索引来查询数组元素。感谢这篇文章https://medium.com/aubergine-solutions/working-with-mysql-json-data-type-with-prepared-statements-using-it-in-go-and-resolving-the-15ef14974c48,我能够弄清楚如何做到这一点,所以我认为这篇文章也可以帮助其他有类似问题/想法的人。
推荐阅读
- vue.js - 选择子项时父级 Vuetify VMenu 未关闭
- php - 在PHP中隐藏基于会话的div
- mongodb - 将枚举字段序列化为 BSON 的异常
- excel - 使用 Excel VBA 在脚本字典中存储给定日期范围内的工作日
- php - 基于数量的渐进式运输成本,在 Woocommerce 中具有最高成本
- amazon-web-services - Jenkins - 适用于 AWS 的 Jenkins Pipeline Step 插件 - 如何更新服务
- dbunit - 为什么 unitils-dbunit 有不同的记录?
- abap - 更新总价值。在项目概览中
- python - 使用机器人框架自定义关键字从 Python 脚本返回列表值
- windows - 从快照创建的 Windows Server 实例 VM 无法在 GCE 上启动