"David Gilden" <[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]
> One final question here on my SQL -- PERL DBI
>
>
> the following is wrong -- it does not work !
>
> $sql = qq|insert into $table_name values
(null,now(),"$email","$name","$comments");|;
> $sql = $dbh->quote($sql); ## this line
> $sth = $dbh->prepare($sql);
Right. You dont want to quote the whole SQL statement.
>
> if I do this:
>
> $name = $dbh->quote(param('Name'));
> $email = param('Email');
> $comments = $dbh->quote(param('Comments'));
>
> $sql = qq|insert into $table_name values
(null,now(),"$email","$name","$comments");|;
> $sth = $dbh->prepare($sql);
>
> It works, it escapes \'s just fine but also adds 'around the text string'.
> I just want to escape \'s
Right it prepares the value for embedding in a SQL statement. If you drop
the double quotes in your assignment to $sql, it will work.
>
> I was using:
> $value =~ s/'/\\'/g; # escape 's
>
> Wiggins d'Anconia suggested using DBI to do escape \'s. Did I miss
something in the perldoc DBI ?
>
I would use placeholders:
$sql = 'insert into $table_name values (null, now(), ?, ?, ?)';
$sth = $dbh->prepare($sql);
$sth->execute( param('Name'), param('Email'), param('Comments') );
the execute() method will run each of its arguments through quote() for you,
so you dont have to think about it.
Todd W.
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]