use SQL::Abstract; my $sql = SQL::Abstract->new; my $book_data = {}; # your data from above my ( $stmt, @bind ) = $sql->insert("books", $book_data); print $stmt, "\n\n"; print join(" : ", @bind), "\n"; my $sth = $dbh->prepare($stmt); my $rv = $sth->execute(@bind); die "FAIL! DBI, ur doin it rong!" unless $rv == 1;