Re: suppress quoting in prepared sql

"Wm Mussatto" <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.dbi.general
Message-ID <[email protected]>
On Tue, April 5, 2016 09:24, Bruce Ferrell wrote:
> I'm generating a sql statement like this:
>
> sth  = $mysql_dbh->prepare(
> "select sum(column) as columnSum from table where value in ( ? ) and
> row_date between cast( ? as date) and cast( ? as date) ");
>
> sth->execute( $ValueIDs ,$week_start_date,$week_end_date);
>
> $ValueIDs is a series of unquoted values:
>
> 01161,01162,01262,01147,01034,01125,01125,01017,01125,01278,01204,01164
>
> When observed at the mysql server, the sql appears as follows:
>
> select sum(column) as columnSum where value in (
> '01161,01162,01262,01147,01034,01125,01125,01017,01125,01278,01204,01164'
> ) and row_date between cast( '2016-03-29' as date) and
> cast( '2016-04-05' as date)
>
> resulting in no data being returned.
>
> When the sql is manually entered as follows:
>
> select sum(column) as columnSum where value in (
> 01161,01162,01262,01147,01034,01125,01125,01017,01125,01278,01204,01164 )
> and row_date between cast( '2016-03-29' as date) and
> cast( '2016-04-05' as date)
>
> The correct values are returned.
>
> How can I suppress the quoting for the IN clause?
First, you don't say that you are using (@results) = $sth->fetchrow_array.
Second, I'm not sure you can use a ? to replace multiple entries.  I'd
assemble the result using a perl join function and then put that in.  But
not using a ?
------
William R. Mussatto
Systems Engineer
http://www.csz.com
909-920-9154
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.