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 ; return 0 unless $table && $values ; return 0 if ref $values ne 'HASH' ; my @vals ; my @keys ; while ( my ( $k , $v ) = each %$values ) { push @vals , $v ; push @keys , $k ; } my $insert_keys = join ', ' , @keys ; my $insert_vals = join ', ' , '?' x @keys; my $dbh = open_db ; my $sth = $dbh -> prepare ( "INSERT INTO $table ( $insert_keys ) VALUES ( $insert_vals )" ) ; my $ok = $sth -> execute ( @$values ) ; $sth -> finish ; return 1 if $ok ; return 0 unless defined $primary_key ; return 0 unless exists $values -> { $primary_key } ; my $primary_val = delete $values -> { $primary_key } ; $#vals = 0 ; $#keys = 0 ; while ( my ( $k , $v ) = each %$values ) { push @vals , $v; push @keys , $k; } my $update_vals = join ', ' , map "$_ = ?" , @keys ; $sth = $dbh -> prepare ( "UPDATE $table SET $update_vals WHERE $primary_key = ?" ) ; $ok = $sth -> execute ( @vals , $primary_val ) ; $sth -> finish ; return $ok; } 1 ;