1

動的に生成されたクエリがあります。1 つのパラメーターを除くすべてのパラメーターはオプションであり、1 つの必須フィールドがあります。私は頭が良いと思っていましたが、非常に奇妙なことが起こります。

-cfscript
// Standard new query(), set name, datasource etc

query.addParam(value=requiredParam, type=cf_sql_varchar);
sqlStatement = "select ....";

if (optional field 2){
    sqlStatement &= "and field like '%?%' ";
    query.addParam(value=optionalValue, type=cf_sql_varchar);
}
... optional fields 2,3,4,5 repeats ...
query.execute(sql=sqlStatement);

そのため、必要なフィールドのみを渡して実行すると、クエリは正しく、結果も正しくなります。ダンプは、sqlParameter に必要なエントリのみを表示します (2 つの結果を含む)

オプションの引数を使用して呼び出しを追加すると、最初の引数のみが表示されます (必須の引数が表示されます)。オプションの引数は (結果ダンプに) 表示されず、結果セットは 0 行になります。(?? 非常に奇妙な)

デバッガーでトレースしました (CF9 スタンドアロンでは、ビルダーではなく、cf8 拡張機能、cfeclipse から)。

オプションのフィールド ロジックは正しく、コードはテストおよび実行されました。変数ペインでは、パラメータが適切に追加されたように見えますが、結果クエリには表示されません (結果ページにダンプされます) 必要なものだけです。

何か奇妙なことが起こっていると推測していますが、これは意味がありません。すべての addParams を一緒に追加する必要がある可能性はありますか? ライク(構文)が問題ですか?

ifs/conditional を使用すると、追加の addParams が機能しない/表示されないのはなぜですか? ダンプによる奇妙な表示の問題?

デリケートな領域で実際のコードを提供していないことをお詫びします。

4

2 に答える 2

1

ペブカック ...

書きました

if (optional field 2){
    sqlStatement &= "and field like '%?%' ";
    query.addParam(value=optionalValue, type=cf_sql_varchar);
}

になるはずだった:

if (optional field 2){
    sqlStatement &= "and field like ? ";
    query.addParam(value='%#optionalValue#%', type=cf_sql_varchar);
}

クエリが正常に機能し、正しい行が返され、使用されたパラメーターがダンプに表示されるようになりました...

于 2014-04-02T17:08:27.550 に答える