我将遍历Values表列值中的所有记录,并将任何绝对url转换为相对url。我得到这个错误
[Macromedia][SQLServer JDBC Driver][SQLServer]Incorrect syntax near '='.
在代码块的第三到最后一行:
<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>
有什么好主意吗?
我要看的第一件事是在ValEdited的CFSET末尾有一个分号。它会先爆炸的
然后检查你的代码,看看它是否给你同样的错误。
您可能想要考虑的最佳实践是,仅在输出值时使用#…所以
<cfset val = getVals.vals>
是充分的。
下一个我要看的是你的where语句。这假设您的所有值都具有ID, 1到表中记录的数量。如果不是这样,您可能需要将其更新为
where ID = #getVals.ID#
希望这对你有帮助。当我把它写出来的时候,其他人几乎都说了同样的话:P
我个人不会直接更新查询列的值。对我来说,这让我搞不清楚到底发生了什么。我经常使用的方法是使用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)>