如何将参数值传递给ColdFusion数据库查询
我编写了一个数据库查询来提取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>
如果您使用的是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>
你的意思是这样?
<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>
你可以只做#TmID是否#没有CFQueryParam标签,但它是一个好主意,用它来增加安全性(验证)和数据库也将缓存的执行计划,下一次希望提高性能查询执行。
如何从调用函数中设置“tmid”? – 2012-02-03 10:35:31
你需要将tmid传递给函数。在你的'
取决于您如何调用该功能。如果你正在做filmQuery(5),那么它会成为参数[1],除非你在函数中添加了一个CFArgument标签。尝试查找关于CFFunction,CFComponent(如果您正在使用它)和CFArgument的信息。 – 2012-02-03 13:13:05
您应该使用cfqueryparam标记来执行此操作。这有助于数据库执行,并有助于防止SQL注入。例如
where tm.id = <cfqueryparam value="#form.ID#" CFSQLType="CF_SQL_INTEGER">
不要忘记VAR范围FILM_STRIP_QUERY。此外,此代码不会按原样运行,应该是 –
duncan
2012-02-06 15:21:25
好点,更新后 – jamesTheProgrammer 2012-02-06 15:25:29