在读取之前连接ColdFusion变量

时间:2012-09-20 18:00:59

标签: coldfusion coldfusion-9

我不确定这是否可行。我可以连接两个表示变量名的字符串,然后从中读取变量值吗?例如:

<cfloop index="person" from="0" to="#numberAuthorized - 1#">
  //USING 'thePerson' DIDN'T WORK EITHER
  <cfset thePerson = 'authorized_name' & person>
  <cfquery name="qAddAuthorizedPeople" datasource="#thedb#" blockfactor="100">
    INSERT INTO people (requestid, fullname)
    VALUES ('#requestid#', '#authorized_name & 1#')
  </cfquery>
</cfloop>

我需要阅读的变量是authorized_name0, authrozied_name1, etc.。所以我循环,所以我可以增加一个索引,将它追加到变量名的末尾。然后插入我的数据库。显然,这不起作用。我之前尝试连接并将其设置为变量(thePerson)并将#thePerson#放入查询中,但这也无效。我能以任何方式做到这一点吗?

2 个答案:

答案 0 :(得分:5)

编辑我不确定您是如何传递这些变量的。但是说它们在FORM范围内...... FORM也是一种结构。使用任何结构,您都可以使用关联数组表示法动态访问键。 (另外,请务必正确确定变量的范围。)

<cfloop from="0" to="#numberAuthorized - 1#" index="counter">
  <!--- extract value of authorized_name0, authorized_name1, ... --->
  <cfset variables.fullName = FORM["authorized_name"& counter]>

  <cfquery name="qAddAuthorizedPeople" datasource="#thedb#" blockfactor="100">
    INSERT INTO people (requestid, fullname)
    VALUES (
      <cfqueryparam value="#requestid#" cfsqltype="cf_sql_varchar">
      , <cfqueryparam value="#variables.fullName#" cfsqltype="cf_sql_varchar">
    )
  </cfquery>
</cfloop>

答案 1 :(得分:0)

如果您从查询中获取了名称列表,那么您将如何循环并将其添加到INSERT中:

<cfloop from="1" to="#structCount(numberAuthorized)#" index="person">
    <cfquery name="qAddAuthorizedPeople" datasource="#thedb#" blockfactor="100">
    INSERT INTO people (requestid, fullname)
    VALUES ('#requestid#', '#numberAuthorized["authorized_name"][person]#')
    </cfquery>
</cfloop>

在上面的示例中,“authorized_name”被假定为您从中获取名称的表或结构的列的名称。这可能很容易来自某种结构。

我更改了范围以使用structCount(numberAuthorized),如果这是表单struct的名称。如果表单名称的值附加到每个名称的末尾,如“authorized_name_0”和“authorized_name_1”,它将在代码中更清楚地在每次插入之前设置这些变量,这样就很清楚你正在做什么。例如:

<cfloop from="1" to="#structCount(numberAuthorized)#" index="person">
  <cfset counter = counter + 1>
  <cfset newFullname = numberAuthorized["authorized_name_" & counter]>
  <cfquery name="qAddAuthorizedPeople" datasource="#thedb#" blockfactor="100">
  INSERT INTO people (requestid, fullname)
  VALUES ('#requestid#', '#numberAuthorized["authorized_name"][person]#')
  </cfquery>
</cfloop> 

目前还不清楚你是在使用结构还是什么,所以语法需要根据它来改变。从这个角度考虑上面的更多伪代码。