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