CFOUTPUT循环异常:maxRows不生效、非预期输出全部行求助
问题分析与解答
疑问1:为何本该仅显示第1行却输出所有行?
核心问题出在嵌套的<cfoutput>标签上:
- 外层
<cfoutput query="mylist">已经在循环遍历查询结果 - 当
mylist.CurrentRow eq 1时,你嵌套了一个无query属性的<cfoutput>。在CFML中,这个内部<cfoutput>会继承外层的查询上下文,完整遍历整个mylist查询的26条记录,因此一次性输出了所有行的CurrentRow信息,而非仅当前行内容。
另外,在<cfoutput query>块内无需嵌套<cfoutput>来输出变量,直接使用#变量#即可输出当前循环行的变量值。
疑问2:为何设置maxRows=10却显示26行?
外层<cfoutput>的maxRows=10确实会限制外层循环仅执行10次,但你看到的26行输出并非来自外层循环,而是来自内部嵌套的<cfoutput>——这个内部标签没有maxRows限制,会完整遍历整个查询的26条记录,因此输出了26行内容。
修复后的代码示例
<cfquery datasource="mydata" username="myuser" password="mypass" name="mylist" cachedWithin="#createTimeSpan( 0, 0, 5, 0 )#"> SELECT field1,field2 WHERE product = "myproduct" ORDER BY idfield DESC LIMIT 26 </cfquery> <!--- process them ---> <cfoutput query="mylist" maxRows=10> <!--- get the latest 6 record ---> <cfif mylist.CurrentRow lte 6> <!--- do something special with the latest record ---> <cfif mylist.CurrentRow eq 1> do something special <!--- 直接输出变量,无需嵌套cfoutput ---> mylist.CurrentRow - #mylist.CurrentRow#<br> <cfelse> do something else </cfif> <cfif mylist.CurrentRow lte 3> do something </cfif> </cfif> do something </cfoutput>
修改后效果:
- 移除嵌套
<cfoutput>,仅在CurrentRow=1时输出一行目标内容 - 外层
maxRows=10会正确限制循环次数,不会出现多余行
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

