如何将参数值传递给ColdFusion数据库查询

如何将参数值传递给ColdFusion数据库查询,coldfusion,Coldfusion,我已经编写了一个数据库查询来提取ColdFusion中的信息,我想知道如何将值传递给WHERE子句以获取相关数据。这是我的代码示例。有人能帮忙吗 <cfquery name="FILM_STRIP_QUERY" datasource="#dsn#"> select distinct tm.id as teachingmoduleid, (select concat(prs.first_name, ' ',prs.last_name) AS Video_presen

我已经编写了一个数据库查询来提取ColdFusion中的信息,我想知道如何将值传递给WHERE子句以获取相关数据。这是我的代码示例。有人能帮忙吗

<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>

你是说像这样的事吗

<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>

您可以在不使用CFQueryParam标记的情况下执行tmid,但最好使用它来添加安全验证,数据库还将缓存执行计划,希望在下次执行查询时提高性能。

您应该使用CFQueryParam标记来执行此操作。这有助于数据库执行,也有助于防止SQL注入。e、 g

where tm.id = <cfqueryparam value="#form.ID#" CFSQLType="CF_SQL_INTEGER">

如果您使用的是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>

如何从调用函数设置tmid?您需要将tmid传递给函数。在标记add tmid=form.tmid中,可以在cfinvoke函数中使用任何变量名。查看Adobe的live docs以了解更多信息,具体取决于调用函数的方式。如果您正在执行filmQuery5,那么它将是参数[1],除非您在函数中添加了CFArgument标记。尝试查找有关CFFunction、CFComponent(如果正在使用)和CFArgument的信息。不要忘了使用VAR scope FILM\u STRIP\u查询。而且,这段代码不会按原样工作,应该是这样的