Thread Mysql und Perl
(34 answers)
Opened by Johannes at 2012-06-14 09:14
Mal als ungetesteten Vorschlag.
database.pm: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 package database; use strict; use warnings; use DBI; our $con = "DBI:mysql:$db"; our $user = "root"; our $passwort = "pwd"; my $db; sub open_db() { unless($db) { $db=DBI->connect($con,$user,$passwort) || die "DB connection not made: $DBI_errstr"; } return $db; } sub close_db() { return unless($db); $db->disconnect; $db=undef; } sub insert_tab { my $table = shift; my $values = shift; my $primary_key = shift; # $table und $values müssen vorhanden sein! return 0 unless($table and $values); # $values muss ein hash sein! return 0 if(ref($values) ne 'HASH'); # INSERT ----------- # Keys und Values separieren my @vals; my @keys; while (my ($k,$v)=each(%$values)) { push(@vals,$k); push(@keys,$v); } my $insert_keys=join(', ',@keys); # Für jeden wert ein '?' my $insert_vals=join(', ',map{'?'}@keys); my $dbh=open_db(); my $sth = $dbh->prepare(qq{ INSERT INTO $table ($fieldlist) VALUES ($fieldvalues) }); my $ok = $sth->execute(@$values); $sth->finish(); # einfügen Erfolgreich return 1 if($ok); # einfügen war nicht erfolgreich aber kein Primärer Key wurde definiert return 0 unless(defined($primary_key)); # UPDATE --------- # ist der Primäre Key aufgeführt? return 0 unless(exists($values->{$primary_key})) # primären key entfernen my $primary_val=delete($values->{$primary_key}); # Keys und Values separieren @vals=(); @keys=(); while (my ($k,$v)=each(%$values)) { push(@vals,$k); push(@keys,$v); } my $update_vals=join(', ',map{"$_ = ?"}@keys); $sth = $dbh->prepare(qq{ update $table SET $update_vals WHERE $primary_key=?}); $ok=$sth->execute(@vals,$primary_val); $sth->finish(); return $ok; } 1; Aufruf: Code (perl): (dl
)
1 2 3 4 5 6 7 8 #!/usr/bin/perl use strict; use warnings; use database; my $ok=database::insert_tab('test_table',{ id=> 1, user => 'a', wert => 'b', 'time' => localtime() },'id'); print $ok?"OK":"Fehler!","\n"; database::close_db(); |