Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]3381[/thread]

MySQL Update-Statement optimieren: Zugriff auf Variablen in AoH



<< >> 7 Einträge, 1 Seite
Ronnie
 2003-12-04 11:28
#35748 #35748
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Hallo, ich habe folgendes Konstrukt:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  $dbh->do("    UPDATE firma
SET Konzern = '$$items[0]->{value}',
Firma = '$$items[1]->{value}',
Zusatz1 = '$$items[2]->{value}',
Zusatz2 = '$$items[3]->{value}',
Strasse = '$$items[4]->{value}',
PLZ = '$$items[5]->{value}',
Ort = '$$items[6]->{value}',
Land = '$$items[7]->{value}',
Telefon = '$$items[8]->{value}',
Fax = '$$items[9]->{value}',
Email = '$$items[10]->{value}',
Webadresse = '$$items[11]->{value}',
KAM = '$$items[12]->{value}'
WHERE eid = $eid
");


Die Zuweisung erfolgt aus einem Array of Hashes (welches ich für HTML::Template benutze). Was mich stört ist die Darstellung. Kann ich nicht Platzhalter (?) verwenden und dann auf ein Slice verweisen?
Code: (dl )
$$items[0..12]->{value}

Ich dachte schon mal sowas irgendwo gesehen zu haben, kann mal einer ein Beispiel posten?

Gruss,
Ronnie
renee
 2003-12-04 11:47
#35749 #35749
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
dann darfst du aber kein $dbh-> do benutzen, sondern
Code: (dl )
1
2
3
$sth = $dbh->prepare("UPDATE table SET column=? where ID=Wert;");
$sth->execute($Skalar);
$sth->finish();
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Strat
 2003-12-04 13:36
#35750 #35750
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
@Ronnie: nebenbei: wenn es sich um userinput handelt, dann solltest du die Werte vor dem Einfuegen mit $wertSicher = $dbh->quote($wertUnsicher); behandeln; was passiert z.B., wenn in einem Wert ein ' vorkommt? Das quote setzt uebrigens automatisch ' um den wert...
Bei renee's Antwort braucht man das allerdings nicht, weil da automatisch gequoted wird.
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Ronnie
 2003-12-04 14:03
#35751 #35751
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Danke an euch zwei! Habt ihr noch eine Idee ob man das mit dem Slice machen kann, es ist ansonsten immer soviel Tipp-Arbeit. Ich hatte schon überlegt es über ein zeites (Hilfs-)Array zu machen, hier ein vereinfachtes Beispiel:
Code: (dl )
1
2
3
my $items = [ {'value' => '1'}, {'value' => '2'}, {'value' => '7'}, ];
my @bag;
for (@$items) { push @bag, $_->{'value'}; }

so dass ich dan folgendes probieren könnte:
Code: (dl )
$sth->execute(@bag);

Ich finde das aber etwas unschön.

Gruss,
Ronnie
pq
 2003-12-04 14:13
#35752 #35752
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
wieso denn ein slice? versteh ich nicht. ein slice brauchst du doch nur, wenn du nur einen
teil von $items übergeben willst.
so wie du es gemacht hast, funktioniert es doch. oder willst du einfach nur das hilfsarray
sparen? das hat immer noch nic mit slices zu tun, aber:
$sth->execute ( map $_->{value}, @$items );
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Ronnie
 2003-12-04 14:24
#35753 #35753
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
@pq: map kann so nützlich sein, man muss nur draufkommen, die Lösung ist super, danke!
ptk
 2003-12-05 11:26
#35754 #35754
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=renee,04.Dec..2003, 10:47]dann darfst du aber kein $dbh-> do benutzen, sondern
Code: (dl )
1
2
3
$sth = $dbh->prepare("UPDATE table SET column=? where ID=Wert;");
$sth->execute($Skalar);
$sth->finish();
[/quote]
Klar geht es auch mit do:
Code: (dl )
$sth = $dbh->do("UPDATE table SET column=? where ID=Wert;", undef, $Skalar);
<< >> 7 Einträge, 1 Seite



View all threads created 2003-12-04 11:28.