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
相关产品推荐
相关产品推荐

