4

何か間違っているのかわかりませんが、CFScriptで書くと1回のクエリで複数回cfqueryparamを使えないようです。

この動作は 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それは完全にうまく機能します。パラメータを使用する場所ごとにパラメータを作成する必要がありますか?

4

1 に答える 1

7

それが CFQuery の場合、値ごとに 1 つの 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); 

「なぜ1つのaddParamが両方のプレースホルダーに対応できないのか」という質問については、ColdFusionによるクエリの解析方法に帰着すると思います.2つのパラメータープレースホルダーを指定すると、パーサーはおそらく2つのパラメーターが定義されていることを期待しているためです。

于 2011-02-17T05:58:42.157 に答える