[Dbix-class] Error with escaped apostrophe and bind param
Mark Trostler
mark at zzo.com
Fri Mar 14 19:36:48 GMT 2008
the quote() function is quite lame in my experience - for raw SQL I use:
# get rid of any backshlased single quotes
$value =~ s/\\'/'/g;
# Fixup regular single quotes
$value =~ s/'/', char(39), '/g;
# Get rid of question marks
$value =~ s/\?/', char(63), '/g;
So "What's up" ends up like: 'What', char(39), 's up'
Mark
Ronald J Kimball wrote:
> I'm getting an error with the following query, which finds all users who
> have not yet been sent a message from the specified user with the
> specified subject(s).
>
> Due to SQL::Abstract limitations, I'm providing some literal SQL for the
> join clause, which happens to contain an escaped apostrophe.
>
> my $user_id = 43;
> my @old_subjects = ("What's up");
>
> my $users =
> $schema->resultset('User')->search(
> { 'user_message.message_id' => undef,
> 'me.status' => 1,
> },
> { from => [
> { me => 'user' },
> [ { user_message => 'user_message',
> -join_type => 'left' },
> { 'user_message.recip_user_id' => 'me.user_id',
> 'user_message.subject' =>
> \ ('IN (' .
> join(', ', map $schema->storage->dbh->quote($_),
> @old_subjects) .
> ')'),
> 'user_message.sender_user_id' => $user_id,
> },
> ],
> ],
> },
> );
>
> my $count = $users->count;
>
>
> Error message:
>
> DBIx::Class::ResultSet::count(): DBI Exception: DBD::mysql::st
> bind_param failed: Illegal parameter number [for Statement "SELECT
> COUNT( * ) FROM user me LEFT JOIN user_message user_message ON (
> user_message.recip_user_id = me.user_id AND user_message.sender_user_id
> = 43 AND user_message.subject IN ('What\'s up') ) WHERE ( me.status = ?
> AND user_message.message_id IS NULL )"]
>
>
> Without the apostrophe in the message subject, the query works fine.
>
>
> Is this a known issue? Are there any workarounds? (If necessary, I can
> just run this query directly through DBI rather than using DBIC.)
>
> DBIx::Class 0.08007
> DBI 1.50
> DBD::mysql 3.0002
>
>
> thanks,
> Ronald
>
> _______________________________________________
> List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
> IRC: irc.perl.org#dbix-class
> SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
> Searchable Archive:
> http://www.grokbase.com/group/dbix-class@lists.rawmode.org
>
>
More information about the DBIx-Class
mailing list