1

我正在尝试使用 cfquery 触发更新查询,如下所示

   <cfquery name = "UpdateRecord"   
            dataSource = #DATASOURCE#   
            username = #DBUSER#   
            password = #DBPASSWORD# 
            result="updateResult" >  
        update table1 
set field1=( select field1 from table2 where field3='Some Value')
 where field4='someothervalue'
     </cfquery> 
    <cfdump var="#UpdateResult#">

但是,当我执行这个页面时,页面没有加载,在状态栏中我可以看到它的加载很长时间。

但是如果我使用任何简单的更新查询,比如

update table1 set field1='abc' where field4='someothervalue'

然后它工作正常

任何人都知道如何使用 cfquery 执行上述查询吗?

谢谢

4

3 回答 3

2

如果您可以尝试使用 cfqueryparam 作为您的值,并且您不必使用 PreserveSingleQuotes。它还可以防止 SQL 注入。

于 2009-12-23T05:43:09.953 回答
1

您是否尝试将更新包装在 PreserveSingleQuotes 中?

 <cfquery name = "UpdateRecord"   
        dataSource = #DATASOURCE#   
        username = #DBUSER#   
        password = #DBPASSWORD# 
        result="updateResult" >  
   #PreserveSingleQuotes(update table1 set field1=( select field1 from
   table2 where Field3='Some Value') where field4='someothervalue')#
 </cfquery> 
于 2009-12-23T04:46:49.703 回答
0

您确定您的子选择语句返回 1 行。这取决于您正在运行的 RDMS,但我很确定并非所有数据库都支持此功能。我会先尝试直接在您的数据库上运行查询,看看它是否运行正确。

您可以通过在查询末尾设置限制 1 来强制 sql 仅返回 1 行,或者如果您的数据库不支持将 field1 包装在聚合中。

SELECT MAX(field1) FROM table2 WHERE field3 = 'Some Value'

注意:如果您的字符串值是来自用户的参数,您应该确保使用 cfqueryparam 来防止 SQL 注入。

于 2009-12-23T03:25:07.157 回答