2010-04-02 4 views
2

Dans mon composant CF, j'ai essayé de filtrer les données de l'entrée utilisateur (getSearchString) et d'exécuter le code, j'ai un problème avec la fonction WHERE. Peut suggestion quelle est la bonne façon?CFQuery où param

<cffunction name="getParks" access="remote" returntype="struct"> 
<cfargument name="page" required="true" /> 
<cfargument name="pageSize" required="true" /> 
<cfargument name="gridsortcolumn" required="true" /> 
<cfargument name="gridsortdirection" required="true" /> 
<cfargument name="getSearchString" default="" /> 

<cfif arguments.gridsortcolumn eq ""> 
    <cfset arguments.gridsortcolumn = "parkName" /> 
    <cfset arguments.gridsortdirection = "asc" /> 
</cfif> 

<cfquery name="parks" datasource="cfdocexamples"> 
    select  parkName, parkType, city, state 
    from  parks 
    where  <cfqueryPARAM value = "#getSearchString#" CFSQLType = "CF_SQL_VARCHAR"> 
    order by #arguments.gridsortcolumn# #arguments.gridsortdirection# 
</cfquery> 

<cfreturn queryconvertforgrid(parks, page, pagesize) /> 

Répondre

4

Il semble être un simple bug sql. Le champ que vous souhaitez comparer avec votre chaîne de recherche est manquant.

devrait plutôt être:

<cfquery name="parks" datasource="cfdocexamples"> 
    select  parkName, parkType, city, state 
    from  parks 
    where  parkName = <cfqueryPARAM value = "#getSearchString#" CFSQLType = "CF_SQL_VARCHAR"> 
    order by #arguments.gridsortcolumn# #arguments.gridsortdirection# 
</cfquery> 
+0

cela fonctionne mais CFGrid ne charge aucune donnée lors de l'exécution du code. – proyb2

+0

désolé, cela fonctionne avec% ..% autour de ce param – proyb2

0

acctually pas autour, mais autour getSearchString param: OÙ parkName COMME ... "#% #% getSearchString" ... Mais méfiez-vous des problèmes de performance avec LIKE, même si vous avez un grand nombre d'entrées, dataGrid ne fait pas de pagination réelle. La solution complète dépend de votre type de base de données.