more useful options | |
PerlMonks |
Re: DBI SQLite statement problem with %by Pope-O-Matik (Pilgrim) |
on Mar 23, 2016 at 13:21 UTC ( [id://1158626]=note: print w/replies, xml ) | Need Help?? |
What's wrong? :) First of all, it is using dynamic sql. Use a placeholder instead: Second, passing an optional clause like this can actually slow things down. You should instead have two queries, to have execution shorter and cleaner. Regardless, assuming CASE is supported, and no values have underscore or percent signs in them, you can change it to: Tag1 LIKE CASE ? WHEN NULL THEN Tag1 ELSE ? END AND Tag2 LIKE CASE ? WHEN NULL THEN Tag2 ELSE ? ENDIf using =, it would be better, but the point is, checking equality for a column against itself is better then LIKE '%'. Another option, assuming any character can be guaranteed to not be used, for example '!': ? IN (Tag1, '!') AND ? IN(Tag2, '!');Of course, an ugly where construct should also work: (? IS NULL OR Tag1 LIKE ?) AND (? IS NULL OR Tag2 LIKE ?);
In Section
Seekers of Perl Wisdom
|
|