Как передать значение параметра в запрос к базе данных ColdFusion - PullRequest
2 голосов
/ 03 февраля 2012

Я написал запрос к базе данных для извлечения информации в 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>

Ответы [ 3 ]

5 голосов
/ 03 февраля 2012

Вы имеете в виду что-то подобное?

<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, но это хорошая идея использовать его для дополнительной безопасности (проверки), и база данных также будеткэшируйте план выполнения, надеясь улучшить производительность при следующем выполнении запроса.

3 голосов
/ 03 февраля 2012

Если вы используете 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>
2 голосов
/ 03 февраля 2012

Вы должны использовать тег cfqueryparam для этого.Это помогает выполнению БД, а также помогает предотвратить внедрение SQL.например,

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