Hej
Kika närmare på placeholders eller DBI->quote.
DBI.pm#Database_Handle_Methods
DBI.pm#Placeholders_and_Bind_Values
Ett exempel på hur du kan använda placeholders:
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
sub DBI_DSN () { 'DBI:mysql:database:mysql.host.net' }
sub DBI_ATTR () { { PrintError => 0, AutoCommit => 1 } }
sub DBI_USER () { 'username' }
sub DBI_PASS () { 'password' }
my $dbh = DBI->connect( DBI_DSN, DBI_USER, DBI_PASS, DBI_ATTR )
or die "Couldn't connect to database: " . DBI->errstr;
my @fields = qw( first_name last_name );
my $fields = join ( ',', @fields );
my $places = join ( ',', ('?') x @fields );
my $sql_insert = <<SQL;
INSERT INTO test ($fields) VALUES($places)
SQL
my $sql_select = <<SQL;
SELECT first_name, last_name
FROM test
SQL
my $sth_select = $dbh->prepare($sql_select)
or die "Couldn't prepare statement: " . $dbh->errstr;
my $sth_insert = $dbh->prepare($sql_insert)
or die "Couldn't prepare statement: " . $dbh->errstr;
$sth_select->execute()
or die "Couldn't execute statement: " . $sth_select->errstr;
while ( my @row = $sth_select->fetchrow_array ) {
$sth_insert->execute(@row)
or die "Couldn't execute statement: " . $sth_insert->errstr;
}
$dbh->disconnect;
__END__
CREATE TABLE test (
test_id int(11) NOT NULL auto_increment,
first_name varchar(50) NOT NULL,
last_name varchar(50) NOT NULL,
PRIMARY KEY (test_id)
);