Gebruik van CFQueryParam met LIST attribute

04-03-2011 | Marcel van Langen | ColdFusion | coldfusion, attributes, cfquery, parameter

Dat we in ColdFusion allemaal query parameters moeten doorgeven met behulp van cfqueryparam, dan weten we allemaal wel. Maar soms is het lastig om gebruik te maken van een lijst met parameters via de SQL IN operator. Zeker als je van tevoren niet zeker weet of de lijst wel altijd een of meerdere waarden zal bevatten. Hoe je daarmee om kunt gaan, lees je in het vervolg van dit artikel.

Stel je hebt een lijst met waarden. Bijvoorbeeld een lijst met ID's uit een eerder uitgevoerde query. Deze kun je eenvoudig inzetten bij een volgende query middels de volgende CFQueryParam:

<cffunction name="getProductenUitMeerdereCategorieen" access="public" returntype="query" output="false">
<cfargument name="lstIDs" required="yes" type="string" hint="lijst met IDs">
<cfquery name="recordset" datasource="#this.dsn#">
SELECT , pro_uuid
, pro_name
, pro_description
, pro_tags
, pro_urlsave
FROM product
WHERE pro_cat_id IN (<cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.lstIDs#" list="yes" />)
</cfquery>
<cfreturn recordset />
</cffunction>

Dit werkt prima. Door toevoeging van het list attribute begrijpt ColdFusion dat hij de parameter als een lijst moet behandelen. Maar wat nu als de lijst leeg is? Het resultaat is dan een spat in de applicatie. Je kunt natuurlijk van alles doen. Vooraf checken (veel extra code noodzakelijk) , de fout catchen (verschrikkelijke oplossing!), oplossen via de NULL attribute van CFQueryParam (qua performance geen goede keus). Het is allemaal niet erg fraai.

De oplossing is echter eenvoudig. Verander bovenstaande CFQueryParam in de onderstaande code:

<cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.lstIDs#,0" list="yes" />

Eenvoudig toch? Wat er gebeurt is dat er altijd minimaal 1 waarde is, namelijk 0. En 0 levert per definitie niets op als ID. De query spat niet langer, en geeft ook geen ongeldige waarden terug. En omdat lijsten ook lege waarden mogen hebben is het - ook bij een voor de rest lege lijst - een volstrekt valide statement.

Over Morloff

Morloff ontwerpt en realiseert succesvolle webtoepassingen op het gebied van procesoptimalisatie, eCommerce en rapportage door de inzet van moderne webtechnieken, sociale media en zoekmachine optimalisatie.

over ons | diensten | portfolio | contact | route

naar website IJsmonster.nl naar website ICT intermediairs naar website marcelvanlangen.com

Twitter

Morloff

Cuneraweg 169a
3911 RH Rhenen

M +31 (0)6 - 515 96 189
W www.morloff.nl
E contactformulier

Morloff op Twitter Morloff op Facebook Morloff op LinkedIn Morloff via RSS