Unify the statement execution methods so that we can have consistent exception raising

This commit is contained in:
ian%hixie.ch 2002-12-28 18:23:24 +00:00
parent 72793480b2
commit bef362c12b
2 changed files with 21 additions and 15 deletions

View File

@ -122,20 +122,12 @@ sub createResultsFrame {
my $self = shift;
my($statement, $execute, @values) = @_;
$self->assert($self->handle, 1, 'No database handle: '.(defined($self->errstr) ? $self->errstr : 'unknown error'));
# untaint the statement and values... (XXX?)
foreach my $value ($statement, @values) {
if (defined($value)) {
$value =~ /^(.*)$/os;
$value = $1;
} else {
$value = '';
}
}
my $handle = $self->handle->prepare($statement);
if ($handle and (not $execute or $handle->execute(@values))) {
return PLIF::Database::ResultsFrame::DBI->create($handle, $self, $execute);
$statement =~ /^(.*)$/os; # untaint # (XXX?)
my $handle = $self->handle->prepare($1);
if ($handle) {
return PLIF::Database::ResultsFrame::DBI->create($handle, $self, $execute, @values);
} else {
raise PLIF::Exception::Database ('message' => $handle->errstr);
raise PLIF::Exception::Database;
}
}

View File

@ -40,10 +40,12 @@ use PLIF::Exception;
sub init {
my $self = shift;
$self->SUPER::init(@_);
my($handle, $database, $executed) = @_;
my($handle, $database, $execute, @values) = @_;
$self->handle($handle);
$self->database($database);
$self->executed($executed);
if ($execute) {
$self->reexecute(@values);
}
}
sub lastError {
@ -108,10 +110,22 @@ sub rows {
sub reexecute {
my $self = shift;
my(@values) = @_;
# untaint the statement and values... (XXX?)
foreach my $value (@values) {
if (defined($value)) {
$value =~ /^(.*)$/os;
$value = $1;
} else {
$value = undef; # used to be '' # XXX ?
}
}
if ($self->handle->execute(@values)) {
$self->executed(1);
return $self;
} else {
if ($self->lastError) {
$self->raiseError();
}
return undef;
}
}