2011-08-08 11 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;

クエリが最初のステートメントの最後にちょうどchockingしているようです。

答えて

5

MySQLは、SQLインジェクションを防ぐために、デフォルトで複数のステートメントを無効にします。有効にするには、接続文字列にallowMultiQueriesフラグを追加する必要があります。

注:明らかに複数のステートメントを有効にした場合は、すべてのクエリで、cfqueryparamまたはaddParamを使用することが非常に重要です。これは、SQLインジェクションのリスクがあるためです。

+0

ありがとうございます。これを有効にして、すべてのサービスを再開しました。私はまだSQLエラーが発生します。私はステートメントの間に空白行が必要だと思うし、#chr(13)#はトリックをやっていないようです...エラーは、最初のステートメントの最後に発生しています。 – Mohamad

+0

新しい行ではなく、セミコロン( ";")です。 – Leigh

+0

ステートメントを区切るためにセミコロンを追加しようとしましたか? –

関連する問題