复杂更新语句的 cfquery 问题

发布于 2024-08-15 17:45:06 字数 666 浏览 5 评论 0原文

我正在尝试使用 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 执行上面这样的查询吗?

谢谢

I am trying to fire Update Query using cfquery like below

   <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#">

But, when I execute this page, the page is not loading, in status bar I can see its loading for long time.

But If I use any simple Update Query like

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

then it is working fine

Can any one has idea how can I execute the queries like above using cfquery?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

何以心动 2024-08-22 17:45:06

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

If you can try using cfqueryparam for your values and you won't have to use PreserveSingleQuotes. It also protects against SQL injection.

若能看破又如何 2024-08-22 17:45:06

您是否尝试将更新包含在 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> 

Did you try wrapping your update within 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> 
固执像三岁 2024-08-22 17:45:06

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

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

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

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

Are you sure your subselect statement is returning 1 row. It depends on what RDMS you are running, but I'm pretty sure not all databases support this feature. I'd try running the query directly on your database first to see if it runs correctly.

You might be able to force sql to return only 1 row by putting a limit 1 on the end of your query, or if your database doesn't support it wrapping field1 in an aggregate.

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

Note: If your String values are parameters from the user, you should make sure to use cfqueryparam to protect against SQL injection.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文