package database ; use strict ; use warnings ; use DBI ; our $con = "DBI:mysql:test_db" ; our $user = "root" ; our $passwort = "pwd" ; my $db ; sub open_db { $db = DBI -> connect ( $con , $user , $passwort ) or die "DB connection not made: $DBI::errstr" unless $db ; return $db ; } sub close_db { return unless $db ; $db -> disconnect ; undef $db ; } 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 ; my @v ; push @keys , shift @v and push @vals , shift @v while ( @v = each %$values ) ; my $insert_keys = join ', ' , @keys ; # Für jeden wert ein '?' my $insert_vals = join ', ' , '?' x @keys; my $dbh = open_db ; my $sth = $dbh -> prepare ( qq !INSERT INTO $table ( $insert_keys ) VALUES ( $insert_vals ) ! ) ; 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 = 0 ; $#keys = 0 ; push @keys , shift @v and push @vals , shift @v while ( @v = each %$values ) ; 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 ;