Sql 显示变量名而不是字段值的ColdFusion查询输出

Sql 显示变量名而不是字段值的ColdFusion查询输出,sql,coldfusion,Sql,Coldfusion,我是一只老狗,在这方面基本上是自学成才的,通常可以让事情变得复杂复杂,但这是第一件让我真正感到困扰的事情 我不想让每个人都有很多东西要解释,但是,这里也许有一个更好的解释和例子: @李-谢谢你的时间和帮助查询是动态的,因为我想要的是一个通用页面组合表单页面加上附带的操作页面,用于编辑多个不同但相当相似的记录集,这样我就不必编写一大堆单独的表单/操作页面对 调用此通用更改表单页面时,将向其传递要编辑的特定记录的ID变量,以及包含要编辑记录的特定记录集特有的listID变量 然后,表单页面使用URL

我是一只老狗,在这方面基本上是自学成才的,通常可以让事情变得复杂复杂,但这是第一件让我真正感到困扰的事情

我不想让每个人都有很多东西要解释,但是,这里也许有一个更好的解释和例子:

@李-谢谢你的时间和帮助查询是动态的,因为我想要的是一个通用页面组合表单页面加上附带的操作页面,用于编辑多个不同但相当相似的记录集,这样我就不必编写一大堆单独的表单/操作页面对

调用此通用更改表单页面时,将向其传递要编辑的特定记录的ID变量,以及包含要编辑记录的特定记录集特有的listID变量

然后,表单页面使用URL.listID查看预定义的记录集变量列表datasource、query table、第1列字段、第2列字段等,这些变量与listID的值和使用动态变量的集合有关。示例-如果listID为5,其中只有一列:

<cfif #URL.listID# EQ 5>
  <cfset page_title = 'Change Member Role Picklist'>
  <cfset datasource = '#Session.db_docs#'>
  <cfset query_tbl = 'tblMemberRole'>
  <cfset columns = 1>
  <cfset column1_label = 'Member Role'>
  <cfset column1_field = "role">
  <cfset column1_input_type = "text">
  <cfset column1_input_size = "100">
  <cfset column1_input_maxlength = "100">
</cfif>
查询使用这些变量ID加上从上述列表中获得的其他变量来检索要编辑的单个记录,并填充更改表单

运行查询:

<cfquery name="cfqGetItem" datasource="#datasource#">
 SELECT * 
 FROM #query_tbl# 
 WHERE ID = <cfqueryparam value="#URL.ID#" cfsqltype="cf_sql_integer">  
</cfquery>
我在此处缩写的更改表单(不填充表格HTML)将是:

<form name="form_item_chg" action="chg_item2.cfm" method="post" enctype="multipart/form-data">

  <input type="text" name="#column1_field#" maxlength="#column1_input_maxlength#" size="#column1_input_size#" value="#cfqGetItem[column1_field][currentRow]#">

  <input type="Submit" value="Post Changes">
</form>
但是,它不是用字段角色的值填充变更表单,而是尝试使用变量名column1_字段,它说这是真的,当然在查询中没有定义

当我尝试cfqGetItem[column1_field][currentRow]时,它说变量currentRow没有定义

当我尝试使用cfqGetItem.column1_字段时,它说查询cfqGetItem中未定义元素column1_字段

我为不知道/使用所有正确的术语提前表示歉意,希望我能合理清楚地解释这一点。我想我将不得不重新编写单独的表单页/操作页对。谢谢大家的时间和帮助

原职: 我的技术水平不高,这可能很简单,但这里是

我的困境是,我试图在查询中使用变量名检索单个记录

首先,我定义了一些变量:

<cfset ID = #Form.ID#<!--- the single record I want to retrieve, passed from a form --->

<cfset datasource = 'MyDatabase'>
<cfset query_tbl = 'MyDatabaseTable'>
<cfset field1 = 'actual_fieldname1'><!--- field in MyDatabaseTable --->
<cfset field2 = 'actual_fieldname2'><!--- field in MyDatabaseTable --->
<cfquery name="cfqGetItem" datasource="#datasource#">
  SELECT * 
  FROM #query_tbl# 
  WHERE ID = #ID#   
</cfquery>
等等

然后,为了检索这条记录,我使用以下变量运行了一个查询:

<cfset ID = #Form.ID#<!--- the single record I want to retrieve, passed from a form --->

<cfset datasource = 'MyDatabase'>
<cfset query_tbl = 'MyDatabaseTable'>
<cfset field1 = 'actual_fieldname1'><!--- field in MyDatabaseTable --->
<cfset field2 = 'actual_fieldname2'><!--- field in MyDatabaseTable --->
<cfquery name="cfqGetItem" datasource="#datasource#">
  SELECT * 
  FROM #query_tbl# 
  WHERE ID = #ID#   
</cfquery>
然后,我尝试显示查询输出:

或者作为

<cfoutput>
  <p>#cfqGetItem.field1#
  <p>#cfqGetItem.field2#
</cfoutput>
或者

<cfoutput>
  <p>#cfqGetItem[field1][currentRow]#
  <p>#cfqGetItem[field2][currentRow]#
</cfoutput>
在每种情况下,我都会收到类似的CF错误消息:查询cfqGetItem中未定义元素field1,或者未定义变量currentrow

如何获得查询输出以生成记录的实际值而不是变量名

非常感谢您的帮助

如果您更改此选项:

<cfoutput>
<p>#cfqGetItem[field1][currentRow]#
<p>#cfqGetItem[field2][currentRow]#
</cfoutput>
为此:

<cfoutput>
<cfloop query="cfqGetItem">
<p>#cfqGetItem[field1][currentRow]#
<p>#cfqGetItem[field2][currentRow]#
</cfloop>
</cfoutput>
你应该没事的。然而,这是最简单的方法

<cfoutput query="cfqGetItem">
<p>#actual_fieldname1#
<p>#actual_fieldname1#
</cfoutput>
将表名和字段名设置为变量会使事情复杂化。除非他们真的可以改变,否则不要这样做。此外,cfqueryparam标记是您的朋友。在这样的地方使用它:

where id = <cfqueryparam
cfsqltype = "cf_sql_integer"
value = "#id#">

您也可以这样尝试:

            <cfquery 
                name="GetParks" datasource="cfdocexamples" 
               >
                SELECT PARKNAME, REGION, STATE
                FROM Parks
                ORDER BY ParkName, State
            </cfquery>



            <cfoutput>
              <p>#GetParks.PARKNAME#
              <p>#GetParks.REGION#
            </cfoutput>


            <cfoutput >
              #GetParks['state'][GetParks.RecordCount]#
            </cfoutput>

            <cfoutput >
              #GetParks['state'][2]#
            </cfoutput>

与你的问题无关,但。。为什么要使查询表和列名成为动态的?根据这些值的来源,这种动态sql可以将您的数据库公开给用户。出于同样的原因,请始终与用户提供的值(如FORM.ID)一起使用。老实说,您应该避免完全使用动态sql,直到您更清楚地了解它是否真的有必要。。首先,我定义了一些变量,没有必要再创建另一个变量。只需在查询中直接使用FORM.ID——当然,也就是说ID=RE:have是一个通用页面,只有我的$0.02,但是。。。创建动态页面在IMO中很难做好。它需要大量的思考和计划。这似乎总是会让生活变得更轻松,但从长远来看,这往往会让生活变得更困难。任何动态代码都将更难维护和调试。如果设计不当,这些任务就会变得更加困难。使用过一个类似的遗留应用程序后,我可以说维护它并不有趣。所以,在决定一个方法时,一定要考虑所有的因素。基于原始的例子,没有理由使用CFULOP。仅使用第二个示例