【问题标题】:Accessing a specific array value returns Uncaught TypeError访问特定的数组值返回 Uncaught TypeError
【发布时间】:2022-09-29 22:45:58
【问题描述】:

我编写了一个获取文档记录的查询,在该记录中有一个名为Attachment 的字段,它将文件位置和属性存储为一个数组。

我曾经这样做的查询是:

$result=DB::Query(\"select * FROM dbo.Toolkit_ComplianceItems WHERE ToolkitItemPk= 114\");
while($data = $result->fetchAssoc()) 

{
$array = $data[\"Attachment\"];
echo $array;  
}

echo 将数组输出如下:

[{
  \"name\": \"files\\/Cairnhill Emergency Plan v.6.0 Sep 2022_dy8yokem.pdf\",
  \"usrName\": \"Cairnhill Emergency Plan v.6.0 Sep 2022.pdf\",
  \"size\": 1020697,
  \"type\": \"application\\/pdf\",
  \"searchStr\": \"Cairnhill Emergency Plan v.6.0 Sep 2022.pdf,!:sStrEnd\"
}]

所以,我知道 var_dump 和 echo 返回我所期望的。

然后,我试图检索确切的字段,例如文件名,该文件名记录在此数组中的 \"name\" 下,我正在使用以下方法执行此操作:

echo \"name: \".$array[0][\"name\"];

但由于我不明白的原因,我收到以下错误消息:

致命错误:未捕获的 TypeError:无法访问类型字符串的偏移量 在字符串上

据我所知,我使用的是正确的 [array][0][name] 结构,但是有人可以指出我做错了什么吗?

(PS 我知道这个查询对 SQL 注入开放,我会在它工作后更正它。)

  • I am aware that this query is open to SQL Injection...您向我们展示的版本不是,它完全是硬编码的。你通常用 114 代替变量吗?

标签: php sql arrays


【解决方案1】:

数据似乎在您的数据库中存储为JSON 字符串。

要从 JSON 字符串中获取数据,首先需要将其解码为 PHP 对象/数组变量:

$data = json_decode($array, true);
echo "name: ".$data[0]["name"];

演示:https://3v4l.org/7i1ZR

请注意,我使用该选项将 JSON 解码为关联数组而不是对象,因此您可以使用现有代码从中读取。参考:https://www.php.net/manual/en/function.json-decode.php

另请参阅:How to extract and access data from JSON with PHP?

【讨论】:

    猜你喜欢
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    相关资源
    最近更新 更多