webForumDet fria alternativet

Perl och SQL

2 svar · 258 visningar · startad av Yolina

YolinaMedlem sedan juli 20033 inlägg
#1

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
#2

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
#3

Tusen tack!

Exemplet funkar ju klockrent, och är även för en nybörjare som mig hyffsat förstaeligt ;)

/Yol

Genererad på 376 ms · cache AV · v20260730165559-full.f96bc7eb