ColdFusion和从MySQL获取数据

ColdFusion和从MySQL获取数据,mysql,coldfusion,Mysql,Coldfusion,我在一个CF站点上工作,需要从MySQL表中获取数据 我可以创建CFQuery fine并检查返回的记录,但是如何获取返回的记录并循环它们,以及从每行的特定字段中获取数据呢 我可以写if/end if等,但我不记得如何访问数据 -JAson假设您使用firstname列进行了名为_的查询: <cfoutput query="#the_query#"> #firstName# ... etc <br> </cfoutput> #名字#。。。etc 在C

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

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

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


-JAson

假设您使用firstname列进行了名为_的查询:

<cfoutput query="#the_query#">
   #firstName# ... etc <br>
</cfoutput>

#名字#。。。etc

在CFQUERY中定义查询后,将结果放入CFOUTPUT标记中。您可以使用语法#[query name].[field name]#指定要显示的字段。

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

例如,您希望对数量大于零的行的“价格”字段求和。(想象一辆购物车)


顺便说一句,在CFOUTPUT查询参数中不鼓励使用散列标记/磅符号/八位字符

[编辑:] 要转储查询堆栈的内容,请在“”行之前添加到[cf\u root]\wwwroot\WEB-INF\debug.cfm:


#重新放置数据库(转储内容,“展开”>BODY[:space:][]*[:space:][]*,“展开”>BODY”)#

有很多方法可以做到这一点。如上所述,您可以将cfoutput与query属性一起使用。您还可以引用“queryname.columnname”

如果需要访问特定的行/列,可以使用如下数组表示法:

queryname.columnname[rownum]
(记住,CF从1开始计数,而不是0)。 对于动态列访问,可以使用

queryname[columnvariable][rownum]
如果您的columname在CF中是非法变量名(如8thCol),您可以稍微修改一下:

queryname['8thCol'][rownum]

希望这能有所帮助。

所有现有的答案/评论似乎都涉及到不同的方面,因此这是一次尝试,旨在将所有这些信息整合到一个清晰的解释中。
(此答案设置为社区wiki-请根据需要进行编辑。)


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

QueryName.ColumnName[RowNum]
QueryName["ColumnName"][RowNum]
在创建查询后的任何时候,这两个选项都将起作用。
两者都可以在
cfoutput
内部用于显示变量,也可以在
cfset
内部用于分配变量

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

QueryName[DynamicColumnName][RowNum]
QueryName["Partial#DynamicName#"][RowNum]
QueryName["Partial"&DynamicName][RowNum]

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

<cfloop index="CurrentRow" from="1" to="#QueryName.RecordCount#">
    <cfoutput>#QueryName.ColumnName[CurrentRow]#</cfoutput>
</cfloop>

#QueryName.ColumnName[CurrentRow]#
您可以简单地执行以下操作:

<cfloop query="QueryName">
    <cfoutput>#QueryName.ColumnName[CurrentRow]#</cfoutput>
</cfloop>
<cfoutput query="QueryName">
    #ColumnName#
</cfoutput>

#QueryName.ColumnName[CurrentRow]#
作为进一步的快捷方式,您可以执行以下操作:

<cfoutput query="QueryName">
    #QueryName.ColumnName[CurrentRow]#
</cfoutput>
<cfdump var="#QueryName#"/>

#QueryName.ColumnName[CurrentRow]#
而且,在
中,您只需执行以下操作:

<cfloop query="QueryName">
    <cfoutput>#QueryName.ColumnName[CurrentRow]#</cfoutput>
</cfloop>
<cfoutput query="QueryName">
    #ColumnName#
</cfoutput>

#列名#
但是,最后一个快捷方式仅用于显示-如果您执行以下操作:

<cfset ColumnName = "NewValue" />

这不会修改原始查询数据。相反,您需要执行以下操作:

<cfset QueryName.ColumnName[CurrentRow] = "NewValue" />

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


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

<cfoutput query="QueryName">
    #QueryName.ColumnName[CurrentRow]#
</cfoutput>
<cfdump var="#QueryName#"/>

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


要使用CF7显示实际的SQL,您需要在
cfquery
标记中添加一个
result=“QueryInfo”
,然后
将显示SQL。

Awesome,以便从列中输出数据。完美的如果我想将列中的值分配给要操作的变量等,我是否仍然使用CFOUTPUT来访问列?我强烈建议使用CFLOOP而不是CFOUTPUT,然后将输出到浏览器的任何逻辑/变量包装为CFOUTPUT@Jason:如果只是赋值,则只需使用cfset variableName=firstName。但是,如果您想利用cfoutput(group属性)的分组功能,可以使用cfloop来实现这一点。对不起,有点密集,如果不鼓励使用#,我如何从表中指定所需的列?我不认为我知道任何其他方式,因为CF 2!我指的是这一组中的另一个答案。我建议使用而不是在实际的begin/end cfoutput标记中,然后当然需要使用它们。ie#u字段#好的,在我构建了一个CFQUERY并回显它正在运行的SQL之后,您知道如何接受它吗?我没有得到我所期望的,我想确保我的SQL是有序的。1) 创建sql作为变量并执行它#theSql####theSql#或2)使用内部未记录的函数:搜索getDebuggingService().getDebugger().getData()我实际上修改了我们的内部cfdebug页面([cf#root]\wwwroot\WEB-INF\debug.cfm)检查隐藏参数以根据需要转储查询。因此,如果使用queryname.column,是否使用CFOUTPUT?这样:从queryName=#URL.queryName#的内容中选择queryName、title、content;xxx=getContent.contentCFOUTPUT仅在您希望输出到浏览器时才是必需的。带有query属性的CFOUTPUT用于循环查询以输出到浏览器。您不需要它来执行cfset来设置用于操作的变量。