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

