When you use double quotes for strings in Perl, Perl looks through your
strings for variables like $foo, and replaces them with the current value of
$foo. This is called interpolation. When you use single quotes, it
considers your string a literal.
So when you use double quotes, you need to escape any special characters
like $ % " or @. When you use single quotes, the only character you have to
worry about is '. Here are ways you could make this string work.
Double quotes with special characters escaped (due to interpolation)
"SELECT 'David!' LIKE '\%D\%v\%'"
Single quotes with double quote usage for the SQL quoting (no escaping
required)
'SELECT "David!" LIKE "%D%v%"'
Single quotes with single quotes escaped for the SQL quoting
'SELECT \'David!\' LIKE \'%D%v%\''
Keep in mind that interpolation is work, so using one of the single quotes
strings which does not search your string for variables to replace is going
to be higher performance than the double quoted version, although the
difference may be a little or a lot depending on how many times the string
is interpreted (if it is in a loop or something).
----- Original Message -----
From: "Siegfried Heintze" <siegfried@stripped>
To: <mysql@stripped>
Sent: Friday, July 22, 2005 4:03 PM
Subject: How to use Like Clause in Perl? Works fine in MySQL control center!
> I'm having trouble getting the like clause to work. It seems to work fine
> in
> the MySQL Control Center 9.4.beta. I'm using MySQL 4.0.23-debug.
>
> use DBH;
> my $sth = DBH->prepare("SELECT 'David!' LIKE '%D%v%'");
> $sth->execute();
> my $row;
> print join(@$row,",")."\n" while ($row = $sth->fetch);
>
>
> This does not print a "1" in perl. It just prints a ",".
>
> I've posted a query on this in beginners-perl@stripped with no luck.
>
> Anybody have any suggestions?
> Thanks,
> Siegfried
>
> Here is DBH.pm. Below that is my original post in beinners-perl@stripped.
>
>
> package DBH;
> use DBI;
> require Exporter;
> our @ISA = qw(Exporter);
> our @EXPORT = qw(DBH); # Symbols to be exported by default
> our @EXPORT_OK = qw(); # Symbols to exported by request
> our $VERSION = 0.1;
>
>
> our $dbh;
> sub DBH{
> unless ( $dbh && $dbh->ping ) {
> $dbh = DBI->connect ( 'dbi:mysql:dbname=hotjobs;host=SALES', 'xyz',
> 'xyz' ) ;
> die DBI->errstr unless $dbh && $dbh->ping;
> }
> return $dbh;
> }
>
> 1;
> ----------------------------------------------------------------------------
> --------------------------------------------------------
>
>
> The following code works with Activestate perl 8.4/MySQL. If I comment the
> second line, however, it does not work. No error messages and no results.
>
> If I use the MySQL Enterprise console and type in my first SELECT
> statement
> that includes the LIKE clause, it works.
>
> I'm stumped. There must be something strange with that "%", but I cannot
> figure it out.
> Anyone got any suggestions?
>
> Siegfried
>
> my $sJobTitle = "SELECT sName FROM keywords ORDER BY sName WHERE sName
> LIKE
> '%'";
> $sJobTitle = q[SELECT sName FROM keywords ORDER BY sName];
>
> my $sth = DBH->prepare($sJobTitle);
> $sth->execute();
> my $row;
> while ($row = $sth->fetch){
> push @sResult,"<li>".join( "", @$row)."</li>\n";
> }
>
>
> --
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe: http://lists.mysql.com/mysql?unsub=1
>
>