2011-08-08 90 views
2

我尝试编译MySQL的一些语句,并在相同的请求执行它们,但我不断收到一个MySQL语法错误:我是否需要每个MySQL语句的新查询对象?

local.sql = ""; 
for (local.i in this.hitArray) 
{ 
    local.sql &= "UPDATE posts SET viewCount = posts.viewCount + 1 WHERE posts.id = #local.i.postId#;"; 
} 
local.service.setSQL(local.sql); 

原始SQL转储(local.sql VAR):

UPDATE posts SET viewCount = posts.viewCount + 1 WHERE posts.id = 95;UPDATE posts SET viewCount = posts.viewCount + 1 WHERE posts.id = 95;UPDATE posts SET viewCount = posts.viewCount + 1 WHERE posts.id = 95;

看起来查询在第一个语句结束时显示正确。

回答

5

MySQL在默认情况下禁用多个语句以防止sql注入。您必须将allowMultiQueries标志添加到连接字符串以启用它们。

注意:显然,如果启用多个语句,则非常重要的是,所有查询都使用cfqueryparam或addParam,因为您现在面临着SQL注入的风险。

+0

谢谢。我启用了这个功能,并重新启动了我的所有服务。我仍然收到一个SQL错误。我认为这些陈述之间需要有一条空白的界限,而#chr(13)#似乎并没有这样做......错误发生在第一个陈述的最后。 – Mohamad

+0

不是新行,而是分号,即“;”。 – Leigh

+0

您是否尝试添加分号来分隔语句? –