YolinaMedlem sedan juli 20033 inlägg
Hejsan,
En SQL-relaterad Perlfraga:
Jag arbetar med en mySQL Databas. Jag vill hämta värden fran en tabell och lagra i en annan tabell. Jag hämtar värdet/strängen med SELECT och lagrar i en variabel $variabel. Sa langt inga problem.
Sedan vill jag med INSERT lagra strängen i en ny tabell. Da far jag enfast felmeddelanden. Jag misstänker att Perl inte gillar tecknen " " som Strängen har i början och slutet.
Hade jag själv definierat texten, hade det bara varit att skriva:
INSERT INTO Temp VALUES (\"Text här\")
Men jag har ju min text i en variabel och skulle vilja skriva:
INSERT INTO Temp VALUES ($variabel)
Men de gar ju inte.. har nagon nagot förslag? Gar det att fa bort "" tecknen pa nagot vis?
Tack pa förhand Yolina
HansenMedlem sedan aug. 2000383 inlägg
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)
);
YolinaMedlem sedan juli 20033 inlägg
Tusen tack!
Exemplet funkar ju klockrent, och är även för en nybörjare som mig hyffsat förstaeligt ;)
/Yol