Нужен ли новый объект запроса для каждого оператора MySQL? - PullRequest
2 голосов
/ 09 августа 2011

Я пытаюсь скомпилировать несколько операторов 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;

Похоже, что запрос задыхается прямо в конце первого оператора.

1 Ответ

5 голосов
/ 09 августа 2011

MySQL отключает несколько операторов по умолчанию, чтобы предотвратить внедрение SQL.Вы должны добавить флаг allowMultiQueries в строку подключения, чтобы включить их.

Примечание. Очевидно, что если вы включаете несколько операторов, очень важно, чтобы все ваши запросы использовали cfqueryparam или addParam, потому что теперь вы подвержены риску внедрения SQL.

...