通过查询在cfloop中更新cfquery

时间:2013-04-24 19:02:16

标签: coldfusion cfquery cfloop

我将浏览Values表的列val中的所有记录,并将任何绝对URL转换为相对URL。我收到此错误

[Macromedia][SQLServer JDBC Driver][SQLServer]Incorrect syntax near '='.

在这段代码的第3行到最后一行:

<cfquery name="getVals" datasource="#dataBase#">
  Select vals
  FROM Values
</cfquery>

<cfloop 
  query = "getVals">

  <cfset val=#vals#>
    <cfset valEdited= REReplace(
      val, 
      '"(https?:\/\/)?(www\.)?(example\.com)(\/)?"', 
      "'index.php'", 
      'ALL'
      )>

    <cfquery name="update" datasource="#dataBase#">
      UPDATE   Values
      SET      vals = <cfqueryPARAM value = #valEdited#>
      WHERE    ID = <cfqueryPARAM value = #getVals.currentRow#>
    </cfquery>
</cfloop>

关于如何修复它的任何想法?

2 个答案:

答案 0 :(得分:2)

我要看的第一件事是你在Valdedit的CFSET末尾有一个半冒号。 这将首先爆发。

然后检查您的代码,看它是否会给您带来同样的错误。

您可能需要考虑的最佳做法是,在输出值时只使用#,所以

<cfset val = getVals.vals> 

就足够了。

接下来我要看的是你的声明。 这假定您的所有值都具有ID,表中的记录数为1。 如果不是这样,您可能需要将其更新为

where ID = #getVals.ID#

希望这会有所帮助。 当我写下来的时候,其他所有人都说了同样的话:P

答案 1 :(得分:0)

我个人不会直接更新查询列的值。对我而言,令人困惑的是究竟发生了什么。我一直采用的方法是使用QueryAddColumn()将另一列添加到查询中。

http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=functions_m-r_16.html

这使您不仅可以将查询中所需的更改作为新列,而且还可以单独保留原始列,以便您可以更轻松地进行调试。要添加新列,请执行以下操作:

<cfquery name="getVals" datasource="#dataBase#">
  Select vals
  FROM Values
  order by id
</cfquery>

<cfset newVals = []>

<cfloop query="getVals">

    <cfset temp = REReplace(
      val, 
      '"(https?:\/\/)?(www\.)?(example\.com)(\/)?"', 
      "'index.php'", 
      'ALL'
      )>

    <cfset ArrayAppend(newVals, temp)>

</cfloop>

<cfset QueryAddColumn(getVals, "newVals", "Varchar", newVals)>