sub _AddSQL { my ($self, $sql, @bindvars) = @_; push @{$self->{'where'}}, $sql; push @{$self->{'bind'}}, @bindvars; } ... sub _SendSearch { my $self = shift; my $dp = $self->dataprovider(); my $db = $dp->GetDatabase() or return $self->_ThrowError('500 Database unavailable'); my $where = 'AND ('. join ( ') and (', @{$self->{'where'}}). ') '; ... my $sql = $dp->sql_prefix() . $where . $dp->sql_suffix(); $sth = $db->prepare( $sql ) or return $self->_ThrowError ( '500 Cannot prepare search', debug => $db->errstr ); $sth->execute( @{$self->{'bind'}} ) or return $self->_ThrowError ( '500 Cannot execute search', debug => $db->errstr ); my %fields; $sth->bind_columns( \(@fields{ @{ $sth->{'NAME_lc'} } } ) ); my @records = (); while ( $sth->fetch() ) { push @records, $self->_ProcessRecord( \%fields ); } return $self->dataprovider()->_PackageResults ( $numFound, \@records, debug => $where ); }