You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP+PDO查询数据报错Undefined index: high,求原因及解决方法

问题分析与解决方法

嘿,我来帮你拆解下这段PDO代码的问题:

错误核心原因

你用fetchAll(PDO::FETCH_ASSOC)获取的结果是一个二维数组——数组里的每个元素对应查询结果中的一行数据,每一行又是包含high和low的关联数组。而你直接用$data["high"]去访问,相当于在二维数组的顶层找键为high的元素,这显然不存在,所以才会抛出Undefined index: high的错误。

举个直观的例子,假设你的查询返回2行数据,$data的结构大概是这样的:

[
    ['high' => 120, 'low' => 80],
    ['high' => 115, 'low' => 75]
]

针对性解决方法

根据你的需求(获取high和low并存储到数组),分两种场景处理:

场景1:只需要单行数据(比如$period设为1)

把fetchAll换成fetch,直接获取单行关联数组,就能正常访问high和low了:

$result = $this->db->prepare("SELECT high,low FROM data where symbol=:symbol and date1 <= :date1 order by date1 desc LIMIT :limit1");
$result->bindParam(':symbol', $total_pairs, PDO::PARAM_STR);
$result->bindParam(':date1', $date1, PDO::PARAM_STR);
$result->bindParam(':limit1', $period, PDO::PARAM_INT);
$result->execute();

// 用fetch获取单行数据,而非fetchAll
$data = $result->fetch(PDO::FETCH_ASSOC);

// 先判断是否获取到有效数据,再访问键
if ($data) {
    var_export($data["high"]);
    var_export($data["low"]);
}

场景2:需要多行数据

通过遍历二维数组,逐个访问每一行的high和low:

$result = $this->db->prepare("SELECT high,low FROM data where symbol=:symbol and date1 <= :date1 order by date1 desc LIMIT :limit1");
$result->bindParam(':symbol', $total_pairs, PDO::PARAM_STR);
$result->bindParam(':date1', $date1, PDO::PARAM_STR);
$result->bindParam(':limit1', $period, PDO::PARAM_INT);
$result->execute();

$data = $result->fetchAll(PDO::FETCH_ASSOC);

// 遍历每一行数据
foreach ($data as $row) {
    var_export($row["high"]);
    var_export($row["low"]);
}

额外小建议

养成先判断数据是否存在的习惯,比如用isset($row["high"])或者检查$data是否为false,可以有效避免类似的索引未定义错误。

内容的提问来源于stack exchange,提问作者Tommys

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:03:57