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 ; 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 ', ' , '?' 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 = ( ) ; @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 ;