Re: PDO prepared statements and LIKE escaping
| From: | Asher Snyder | Date: | Mon, 04 Aug 2008 23:18:24 +0000 |
| Subject: | Re: PDO prepared statements and LIKE escaping | ||
| References: | 1 2 3 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-277689@lists.php.net to get a copy of this message | ||
Depending on what database you're using you might be able to use LIKE while maintaining security. For instance PostgreSQL has the functions quote_ident(), and quote_literal() which would allow you to use LIKE since these functions would automatically make the string suitable for comparison.
So for instance in a stored procedure in PostgreSQL you could do:
SELECT * FROM sometable WHERE quote_ident(column) LIKE quote_ident($1);
Note that in the above line $1 would be the first parameter of the stored procedure.
-Asher
Adam Richardson wrote:
Like I said, I'm not 'especially pleased' with any idea up until now. I'm certainly open to any other ideas. Adam On Mon, Aug 4, 2008 at 6:57 PM, Larry Garfield <larry@garfieldtech.com>wrote:toHm. So your solution is "don't use LIKE"? I can't say I'm wild about that. :-/ --Larry Garfield On Mon, 4 Aug 2008 15:49:52 -0400, "Adam Richardson" <adam@envisionic.com> wrote:potentialI agree that having to escape values in a stored procedure does run counter to expectations. It's likely other developers have the potential for short-circuiting their LIKE conditions without realizing it. I've dealt with this issue, too, and haven't been especially pleased with any of the solutions I've undertaken. Recently, I've been avoiding LIKE conditions and using INSTR, LOCATE, CHARINDEX, etc. to avoid theLarry,for unescaped wildcards. Adam On Mon, Aug 4, 2008 at 12:33 PM, Larry Garfield <larry@garfieldtech.com>wrote:Depends on what you perceive the purpose of the prepared statementOn Mon, 4 Aug 2008 11:48:39 -0400, "Andrew Ballard" <aballard@gmail.com wrote:<larry@garfieldtech.com>On Mon, Aug 4, 2008 at 11:35 AM, Larry Garfieldwrote:wrote:On Mon, 04 Aug 2008 08:33:44 +0200, Per Jessen <per@computer.org>Larry Garfield wrote:"100%%". However, that does rather defeat the purpose of a prepared statement if I have to do my own escaping anyway, does it not?=20IIRC, the way in SQL to circumvent that is to convert "100%" into
php.=20is=be :-) In this context, I tend to think of performance only. Whichgenerally why I can't be bothered with prepared statements in
youActually in most cases in PHP you don't get much performance. What
rundo get is added security, because prepared statements are cleaner than cleaner and more reliable than string escaping. Of course, then we
-- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.phpinto the % problem above.