2012-04-12 7 views
1

わかりにくいタイトルですが、ここではっきりと解説します。 <cfscript>の内側のクエリオブジェクトを使用して、フォーム内のいくつかのSQLを持っている場合:ColdFusionコンポーネントのcfscript内のクエリーオブジェクト内のSQLの単一引用符

SELECT city + ', ' + state + ' ' + zip as Address2 
FROM users WHERE user_id = :userid 

ColdFusionが出てエラーになります。 addParamを使用して追加したパラメータは:useridであり、状態とzipの間で' 'を削除すると、クエリは完全に機能します。何らかの理由でそのスペースを追加すると、クエリオブジェクトが壊れてしまい、:シンボルの近くに誤った構文が返されます。

このクエリは、単に<cfquery>を使用するとうまく動作しますが、<cfscript>で使用します。何か案は?これはバグですか?または私は何かを逃している?

編集:私はColdFusion 9、MS SQL 2005を使用しています。これはcfscript構文を使用したCFCの内部で行われています。同様に:

component 
{ 
    public function getAgent(member_id) 
    { 
    qryAgent = new query(dataSource="Members"); 
    qryAgent.setName("get_agent"); 
    qryAgent.addParam(name="memberid",value=member_id,cfsqltype="CF_SQL_INTEGER"); 

    result = qryAgent.execute(sql="SELECT FirstName, LastName, FirstName + ' ' + LastName as FullName FROM Member m WHERE m.member_id = :memberid"); 
    return result.getResult(); 
    } 
} 
+0

ただ推測しますが、一重引用符で囲まれた文字列内のクエリです。内側引用符をエスケープするか、または外側引用符を二重引用符に変更しますか? – BennyB

+0

これらの3つの列はすべて同じタイプですか?すべてのcharまたはvarchar()? –

+0

はい、そうです。もう一度+ ''を削除すると、すべてが完璧に機能します。 – derickito

答えて

1

を、私は他の誰かがすでに持っていたことが分かった答えを見つける:私もそれがより連結のようにあなたがやっているようにするには、次の「結果=」式でそれを実行しましたhttp://forums.adobe.com/thread/683656?tstart=-4とadobeがCF 9.0.1で修正しました

この問題は、ColdFusion9 \ CustomTags \ com \ adobe \ coldfusion \ query.cfcというフォルダにあるquery.cfcファイルにあります。 replaceDelimsWithMarkers関数は、listtoarray(私のバージョンでは346行目)を呼び出しています。この呼び出しでは、3番目の引数includeEmptyFieldsがtrueに設定されていないため、SQL文が文字化けしてしまいます。

これは、3番目の引数trueを追加することで手動で修正できます。

1

あなたの構文は、公開されているコードからMS SQLのように見えます。 ACF 9とMS SQL Server 2008がインストールされたローカルボックスで、次のテストを実行しました(私はあなたが2005年だと知っていますが、文字列連結のようなものであれば同じです)。

<cfscript> 
    qry = new query(); 
    qry.setDatasource("mydsn"); 
    qry.setName("myqry"); 
    qry.addParam(name="userid",value="3735",cfsqltype="cf_sql_integer"); 
    result = qry.execute(sql="SELECT firstname + ' ' + lastname AS fullname FROM mydb where userid = :userid"); 
    writeDump(result); 
</cfscript> 

ブラウザでこれを実行すると、正しく連結された「フルネーム」値が返されます。

このコードスニペットは、完全なcfscriptクエリで珍しいものを発見するのに役立ちますか?そうでない場合は、クエリサービスの設定に関連してコードをさらに投稿することは可能ですか?

EDIT:デバッグ後

result = qry.execute(sql="SELECT firstname + ', ' + lastname + ' ' + email AS fullname FROM mydb where userid = :userid"); 
+0

それはまさに私がやっていることです。エラーと私は、引数を削除すると:userid、すべてが動作するか、または ''を削除するとすべて正常に動作することが判明しました。 CF9ビルドは9,0,0,251028です。それが何かと関係があるかどうかわからない – derickito

+0

私はこれがCFCで行われているかもしれないと言及しませんでした。私は彼の意見を反映するために私の質問を編集しました。 – derickito

+0

@derickito私はそれがCFCにあると思ったので、心配はありません!私は似たようなテーブル(FirstName、LastName、member_numberの列を持つMember)を作成しました。私はいくつかのダミーデータを追加し、上記のようにクエリを実行しました。すべてが完璧に機能しました。元の記事で、ColdFusionが「エラー」すると述べました。エラーメッセージの何らかの形式を投稿できますか?編集:私はACF 9.0.1ですが、私は9.0.1でこの種のアップデートの詳細を思い出すことはありませんが、チェックします。 –

関連する問題