1

我正在浏览 Values 表的 vals 列中的所有记录,并将任何绝对 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>

关于如何解决它的任何想法?

4

2 回答 2

2

我要看的第一件事是你在 ValEdited 的 CFSET 末尾有一个分号。那将首先爆发。

然后检查你的代码,看看它是否给你同样的错误。

您可能要考虑的最佳实践是仅在输出值时使用 # ......所以

<cfset val = getVals.vals> 

足够了。

接下来我要看的是你在哪里声明。这假设您的所有值都有 ID,1 到表中的记录数。如果不是这样,您可能必须将其更新为

where ID = #getVals.ID#

希望这可以帮助。到我写它的时候,其他人几乎都说了同样的话:P

于 2013-04-24T19:15:42.810 回答
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)>
于 2013-04-25T13:01:14.980 回答