ColdFusion并从MySQL获取数据

4 mysql coldfusion

我正在CF站点上工作,需要从MySQL表中获取数据.

我可以创建CFQuery并检查返回的记录,但是如何获取返回的记录并循环遍历它们并从每行的特定字段获取数据.

我可以写if if/end if等,我只是不记得如何访问数据.

-Jason

Sam*_*mer 10

假设您使用firstname列创建了一个名为the_query的查询:

<cfoutput query="#the_query#">
   #firstName# ... etc <br>
</cfoutput>
Run Code Online (Sandbox Code Playgroud)


Pet*_*ton 8

所有现有的答案/评论似乎涉及不同方面,因此这是尝试将所有这些信息合并为一个明确的解释.
(此答案设置为社区维基 - 请根据需要进行编辑.)


要从查询中访问变量,请使用:

QueryName.ColumnName[RowNum]
QueryName["ColumnName"][RowNum]
Run Code Online (Sandbox Code Playgroud)

这些都将在创建查询后的任何时候起作用.
两者都可以在里面cfoutput用来显示变量,或者在里面cfset用来分配变量.

第二个对动态变量很有用,可以接受如下变量:

QueryName[DynamicColumnName][RowNum]
QueryName["Partial#DynamicName#"][RowNum]
QueryName["Partial"&DynamicName][RowNum]
Run Code Online (Sandbox Code Playgroud)

为方便起见,不要手动循环查询:

<cfloop index="CurrentRow" from="1" to="#QueryName.RecordCount#">
    <cfoutput>#QueryName.ColumnName[CurrentRow]#</cfoutput>
</cfloop>
Run Code Online (Sandbox Code Playgroud)

你可以简单地做:

<cfloop query="QueryName">
    <cfoutput>#QueryName.ColumnName[CurrentRow]#</cfoutput>
</cfloop>
Run Code Online (Sandbox Code Playgroud)

作为进一步的捷径,您可以:

<cfoutput query="QueryName">
    #QueryName.ColumnName[CurrentRow]#
</cfoutput>
Run Code Online (Sandbox Code Playgroud)

而且,当你在一个<cfloop query="">或一个内部时,<cfoutput query="">你可以简单地做:

<cfoutput query="QueryName">
    #ColumnName#
</cfoutput>
Run Code Online (Sandbox Code Playgroud)

但是,最后一个快捷方式仅用于显示 - 如果您这样做:

<cfset ColumnName = "NewValue" />
Run Code Online (Sandbox Code Playgroud)

这不会修改原始查询数据.相反,你需要做:

<cfset QueryName.ColumnName[CurrentRow] = "NewValue" />
Run Code Online (Sandbox Code Playgroud)

这将修改查询的结果(但不会修改数据库中的值).


要显示已运行的实际SQL查询,使用CF8(也是Railo和OpenBD),您可以执行以下操作:

<cfdump var="#QueryName#"/>
Run Code Online (Sandbox Code Playgroud)

它将向您显示查询结果和已运行的实际SQL.

要使用CF7显示实际的SQL,您需要result="QueryInfo"cfquery标记中添加一个,然后<cfdump var="#QueryInfo#"/>向您显示SQL.


Mic*_*ald 5

或者,您可以使用CFLOOP标记来达到类似的效果

比如说,您想要对数量大于零的行的"价格"字段求和.(想象一下购物车)

<CFSET TOTAL=0>
<CFLOOP QUERY="the_query">
    <CFIF quantity gt 0>
        <CFSET TOTAL=TOTAL+PRICE>
    </CFIF>
</CFLOOP>
Run Code Online (Sandbox Code Playgroud)

顺便说一句,在CFOUTPUT Query参数中不鼓励使用散列标记/井号/ octothorpes

[edit:]要转储查询堆栈的内容,请在"<!--- :: CFTimer :: --->"行之前添加到[cf_root]\wwwroot\WEB-INF\debug.cfm:

<CFIF IsDefined("DumpQueries") >
    <cfset DQ_Queries= QueryToArray( CFDEBUG_QUERIES ) />    
    <CFLOOP From="1" to ="#CFDEBUG_QUERIES.recordcount#" index="i">
        <CFSET DQ_Queries[i].BODY =  DQ_Queries[i].BODY >
        <CFSAVECONTENT Variable="dump_content">
        <CFDUMP Var="#DQ_Queries[i]#" Expand="NO" Label="#DQ_Queries[i].NAME#">
        </CFSAVECONTENT>
        <CFOUTPUT>#REReplaceNoCase(dump_content,"expand"">BODY</td>[[:space:]]*<TD>[[:space:]]*","expand"">BODY</td><td><PRE>")#</CFOUTPUT>     
    </CFLOOP>
</CFIF>
Run Code Online (Sandbox Code Playgroud)