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

PDO查询结果无法显示且报Undefined array key,求代码修复

PHP PDO查询「Undefined array key」问题修复方案

问题根源

  1. 你用PDO::FETCH_NUM获取结果集,这会返回数字索引数组,但你错误地用带冒号的':c_id'、':c_name'作为键取值——这种带冒号的写法是PDO绑定参数的格式,根本不是结果集的字段名。
  2. 即便不用冒号,FETCH_NUM模式下也只能用数字索引(比如0、1)访问字段,无法用字段名。

修复后的代码(两种可选方案)

方案一:用关联数组取值(推荐,可读性更强)

把结果集获取模式改成PDO::FETCH_ASSOC,直接用字段名访问:

<?php 

$stmt=DB_uf::prepare('SELECT c_id, c_name FROM cata_log ORDER BY c_id, c_name') ;
  
$stmt->execute();

$result = $stmt->fetchAll(PDO::FETCH_ASSOC);  
foreach ($result as $row) {
    $catalog = $row['c_id'];
    $product_name = $row['c_name'];
    echo $catalog ;
    echo $product_name;
}

//if ($result->num_rows > 0) {}
//$stmt->execute();
?>

方案二:继续用索引数组取值

如果坚持用FETCH_NUM,就按查询中字段的顺序用数字索引访问:

<?php 

$stmt=DB_uf::prepare('SELECT c_id, c_name FROM cata_log ORDER BY c_id, c_name') ;
  
$stmt->execute();

$result = $stmt->fetchAll(PDO::FETCH_NUM);  
foreach ($result as $row) {
    $catalog = $row[0];
    $product_name = $row[1];
    echo $catalog ;
    echo $product_name;
}

//if ($result->num_rows > 0) {}
//$stmt->execute();
?>

额外提示

  • PDO的方法名规范是驼峰式,比如fetchAll(你的原代码写的fetchall虽然PHP不区分大小写,但建议按规范写)
  • 注释里的$result->num_rows是mysqli的语法,PDO里要获取结果行数可以用$stmt->rowCount(),不过部分数据库驱动对SELECT语句的rowCount()支持有限,直接遍历结果集更稳妥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:10:39