Почему я не могу использовать один и тот же cfqueryparam в двух местах одного и того же запроса при использовании CFScript? - PullRequest
4 голосов
/ 17 февраля 2011

Я не уверен, что делаю что-то не так, но кажется, что вы не можете использовать cfqueryparam более одного раза в одном запросе, если вы пишете его в CFScript.

Такое поведение не соответствуетс CFML.Я только что переписал аналогичный запрос из CFML в CFScript, и я получаю следующую ошибку: cfsqlparam 'id' is not defined

local.query = new Query();
local.query.setSql("
    SELECT id
    FROM myTable
    WHERE myTable.id = :id OR myTable.parentId = :id
");
local.query.addParam(name="id", cfsqltype="CF_SQL_INTEGER", value=arguments.id, maxlength=10);
local.query.execute().getResult();

Если я достану OR myTable.parentId = :id, он работает отлично.Нужно ли создавать параметры для каждого местоположения, которое я собираюсь использовать?

1 Ответ

7 голосов
/ 17 февраля 2011

Если бы это был CFQuery, у вас был бы один cfqueryparam для каждого значения:

where myTable.id = <cfqueryparam... value="#arguments.id#" />
    or myTable.parentid = <cfqueryparam ... value="#arguments.id#" />

, поэтому я предполагаю, что вам нужно сделать то же самое в скрипте:

local.query.setSql("
    SELECT id
    FROM myTable
    WHERE myTable.id = :id OR myTable.parentId = :pid "); 
local.query.addParam(name="id", cfsqltype="CF_SQL_INTEGER",value=arguments.id,maxlength=10); 
local.query.addParam(name="pid",cfsqltype="CF_SQL_INTEGER",value=arguments.id,maxlength=10); 

Что касается вопроса «почему один addParam не может адресовать обе метки-заполнители», я предполагаю, что все сводится к тому, как ColdFusion анализирует запрос - потому что вы указываете две метки-метки, которые синтаксический анализатор, вероятно, ожидает найти две.

...