the singularity of being and nothingness
ColdFusion Query Parameter Weirdness
You can file this one under either “huh, that’s kinda cool” or “that’s terrible…don’t ever do it!”…or maybe both.
As of ColdFusion 9, it’s now possible to execute queries in 100% cfscript. This is awesome for me ‘cuz I just happen to prefer to do as much in cfscript as possible.
Anyway, if you’ve worked with the cfscript version of cfquery, you’ll know that mimicking the behavior of cfqueryparam is pretty straightforward. Something like the following should do the trick:
// create new query services
qs = new query();
// set attributes of service
qs.addattributes(datasource="mydb",name="thequery");
// set sql
qs.setsql("select title from posts where isawesome = ?);
// set queryparam for dynamic query
qs.addparam(value="Awesome",cfsqltype="varchar");
...rest of processing...
Easy enough. I got to wondering if it would be possible to use a ternary operator as the “value” of the queryparam. Turns out, you can 🙂
// set queryparam for dynamic query using ternary operator
qs.addparam(value=form.isawesome==true ? 'Awesome' : '',cfsqltype="varchar");
Here, if a form variable (“isawesome”) is set to true, the value of the parameter will be “Awesome”; otherwise, it will be set to empty string.
I’m not sure how I feel about this. On a certain level, it’s cool that it works. However, it feels kind of hacky to me, especially since it’s just as easy (although an extra line of code…) to move the ternary operation to something else and then use that value in the addparam() invocation.
// set dynamic value to a variable
dynval = form.isawesome==true ? 'Awesome' : '';
// set queryparam for dynamic query using ternary operator
qs.addparam(value=dynval,cfsqltype="varchar");
Anyway, just thought I’d share. I can’t be held responsible for what you do with it 🙂
| Print article | This entry was posted by existdissolve on August 3, 2010 at 4:43 pm, and is filed under ColdFusion, Cool Stuff. Follow any responses to this post through RSS 2.0. You can leave a response or trackback from your own site. |