2012-02-03 30 views
1

ColdFusionで情報を抽出するデータベースクエリを作成しました。関連するデータを取得するためにWHERE句に値を渡す方法を知りたいと思います。これは私のコードサンプルです。誰でも助けてくれる?ColdFusionデータベースクエリにパラメータ値を渡す方法

<cfquery name="FILM_STRIP_QUERY" datasource="#dsn#"> 
select distinct tm.id as teachingmoduleid, 
     (select concat(prs.first_name, ' ',prs.last_name) AS Video_presenter from presentations pss 
      inner join topics tpcs on tpcs.id = pss.topic_id 
      inner join presenters prs on prs.id = pss.presenter_id 
      where pss.name = ps.name 
      and tpcs.title = tp.title 
      ) AS video_presenter, 
     (select pss.43_png from presentations pss 
      inner join topics tpcs on tpcs.id = pss.topic_id 
      inner join presenters prs on prs.id = pss.presenter_id 
      where pss.name = ps.name 
      and tpcs.title = tp.title) AS png_name 
     from teaching_modules tm 
     inner join tm_segments sg on sg.module_id = tm.id 
     inner join topics tp on tp.id = sg.topic_id 
     inner join presenters prs on prs.id = tm.presenter_id 
     left outer join presentations ps on ps.id = sg.presentation_id 
     where tm.id = 
</cfquery> 

、これは呼び出し元の関数

<cfloop = "FILM_STRIP_QUERY"> 
    <!--- this is where I wanna pass the parameter---> 
</cfloop> 

答えて

2

CFCを使用している場合、CFがローカル変数宣言からメモリを解放するように、クエリ名を含むこのような関数が機能します。また、パラメータとcfqueryparam関数も使用します。

<cffunction name="getFILM_STRIP" access="public" returntype="query" output="false"> 
    <cfargument name="id" required="Yes" type="numeric"> 

    <cfset FILM_STRIP_QUERY = ""> 

    <cfquery name="FILM_STRIP_QUERY" datasource="#variables.dsn#"> 
     <!--- select statement ---> 
     WHERE colname = <cfqueryparam cfsqltype="CF_SQL_INTEGER" value=#arguments.id# /> 
    </cfquery> 

    <cfreturn FILM_STRIP_QUERY> 
</cffunction> 
+0

FARM_STRIP_QUERYの範囲をVARに忘れないでください。このコードはそのままでは動作しません。 duncan

+1

良い点、更新された投稿 – jamesTheProgrammer

5

であるあなたは、このような何かを意味するのですか?次回あなたはcfqueryparamタグなし#のTMID番号を単に行うことができますが、それは追加のセキュリティ(バリデーション)のためにそれを使用することをお勧めしますし、データベースも実行計画をキャッシュします、うまくいけば、パフォーマンスを向上させること

<cfset tmId = 5 /> 
<!--- or something like <cfset tmId = url.id /> ---> 
<cfquery name="FILM_STRIP_QUERY" datasource="#dsn#"> 
    <!--- SELECT cols FROM wherever etc... ---> 
    WHERE tm.id = <cfqueryparam cfsqltype="cf_sql_integer" value="#tmId#" /> 
</cfquery> 

クエリが実行されます。

+0

呼び出し関数から "tmid"を設定する方法は? –

+0

関数にtmidを渡す必要があります。あなたの ''タグに 'tmid ="#form.tmid# "'あなたのcfinvoke関数内で任意の変数名を使うことができます。詳細については、アドビのライブドキュメントを参照してください。http://help.adobe.com/jp/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7e0a.html –

+0

どのように関数を呼び出しているかによって異なります。 filmQuery(5)を実行している場合、関数にCFArgumentタグを追加していない限り、引数は[1]になります。 CFFunction、CFComponent(CFFunctionを使用している場合)とCFArgumentについての情報を参照してください。 –

2

これを行うには、cfqueryparamタグを使用する必要があります。これは、DBの実行に役立ち、SQLインジェクションを防ぐのにも役立ちます。例えば

where tm.id = <cfqueryparam value="#form.ID#" CFSQLType="CF_SQL_INTEGER"> 
関連する問題