my %sql_data = ( id => 1, message => $message, ); my $sql = qq/UPDATE bankend SET / . join(' = ?,', keys %sql_data) . qq/ = ? /; $sth = $dbh->prepare($sql) or die "prepare: $stmt: $DBI::errstr"; if (!$sth->execute(values %sql_data)) { $sql = qq/INSERT INTO bankend (/ . join(',', keys %sql_data) . qq/) VALUES (/ . join(',', ('?') x keys %sql_data) . qq/)/; $sth = $dbh->prepare($sql) or die "prepare: $stmt: $DBI::errstr"; $sth->execute(values %sql_data) or die "execute: $stmt: $DBI::errstr"; }