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

odbc_fetch_row多次调用仅首次生效的原因及解决方法

ODBC结果集多次调用odbc_fetch_row仅首次有效问题分析与解决

问题原因

  • odbc_fetch_row的核心作用是推动结果集的内部指针,每次调用都会让指针向下移动一行。第一次循环执行完毕后,指针已经走到结果集的最后一行之后,后续再调用该函数自然无法获取到新数据。
  • ODBC结果集默认是单向遍历模式,指针只能向前移动,不会自动重置到起始位置。

解决方法

方法1:重置结果集指针

使用odbc_fetch_row($viewTablo, 0)将指针重置到初始位置(参数0代表回到第一行之前的起点),之后即可再次遍历结果集:

// 第一次遍历
while(odbc_fetch_row($viewTablo)){
    echo "<td>".odbc_result($viewTablo,$inta)."</td>";
    echo "</tr>";     
}

// 重置指针到初始位置
odbc_fetch_row($viewTablo, 0);

// 第二次遍历
while(odbc_fetch_row($viewTablo)){
    // 写入第二次遍历的业务逻辑
}

方法2:提前将结果集转存到数组

如果需要多次复用数据,更高效稳妥的方式是第一次遍历时就把所有数据存入数组,后续直接操作数组即可,避免重复操作数据库结果集:

// 先把所有数据存入数组
$allData = [];
while(odbc_fetch_row($viewTablo)){
    $allData[] = odbc_result($viewTablo,$inta);
}

// 第一次使用数组数据
foreach($allData as $value){
    echo "<td>".$value."</td>";
    echo "</tr>";     
}

// 第二次使用数组数据
foreach($allData as $value){
    // 写入第二次使用的业务逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:02:34