On Jun 12, 4:59 am, [EMAIL PROTECTED] (Tom Allison) wrote:
> On Jun 11, 2007, at 7:52 PM, Northstardomus wrote:
>
>
>
>
>
>
>
> > I have a Perl script where I try to strip some data from a web page
> > and insert it
>
> > into a database. I'm having a problem where, it seems like the method
> > of quoting
>
> > the data for insertion don't seem to be working (as far as escaping
> > the text) and
>
> > some of the text is ending up getting injected into the SQL command.
>
> > In this example, I am capturing the paragraphs of text and inserting
> > each HTML
>
> > paragraph into a new record. What seems to be hanging up the
> > insertion is the "or
>
> > die" portion of the text. It will also bomb if the text has a word
> > like "don't".
>
> > I thought the insertion mechanism I'm using would properly escape
> > these special
>
> There are two methods of doing a "safe" insertion that I'm familiar
> with under the DBI module.
> I've never had a problem with either of these. But I've had many
> problems when I don't use these.
>
> Option one:
>
> use the prepare statement
>
> my $sql = "insert into table(name, address, state) values (?,?,?)";
> my $sth = $dbh->prepare($sql);
>
> ...
>
> $sth->execute($name,$address, $state);
>
> This will automatically do proper escaping of the strings you want to
> insert.
>
> Option Two:
>
> If for some reason it's not practical or possible to use the prepare
> statement then you can use the DBI quote(). However, this is
> generally rare.
>
> my $sql = "insert into table(name) values (" . $dbh->quote($name) . ")";
> $dbh->do($sql);
>
> But option one is going to be your best bet.- Hide quoted text -
>
> - Show quoted text -
Sorry if this is a repeat, I haven't seen my latest reply in a couple
hours here:
I replaced the commented code with the following:
# if ($OK2INSERT) {
# $dbh = DBI->connect("DBI:SQLite:dbname=C:/Lanosrep/beW/Perl/
HelpPage/area.db", "", "", {'RaiseError' => 1});
# print "<br/>Inserting into Database , @values.";
# $dbh->do("INSERT INTO area_status (areaID, survey_date,
update_time, status ) VALUES ('$values[0]', '$values[1]',
'$values[2]', '$values[3]')");
# $dbh->disconnect();
# }
if ($OK2INSERT) {
$dbh = DBI->connect("DBI:SQLite:dbname=C:/Lanosrep/beW/Perl/
HelpPage/area.db", "", "", {'RaiseError' => 1});
print "<br/>Inserting into Database , @values.";
$dbh->prepare('INSERT INTO area_status (areaID, survey_date,
update_time, status ) VALUES (?,?,?,?)');
$dbh->execute('$values[0]', '$values[1]', '$values[2]',
'$values[3]');
$dbh->disconnect();
}
And I get this error:
Can't locate object method "execute" via package "DBI::db" at
test_script.pl
line 182 (#1)
(F) You called a method correctly, and it correctly indicated a
package
functioning as a class, but that package doesn't define that
particular
method, nor does any of its base classes. See perlobj.
Uncaught exception from user code:
Can't locate object method "execute" via package "DBI::db" at
test_script.pl line 182.
at test_script.pl line 182
I would think I would have this available just by using DBI???
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/