Just 1 remark about few of your CVS commits : we have decided to use prepare("update xx where yy=?"); execute($yy_value); If there are prepare("update xx where yy=$yy_value") execute(); then it's because nobody moved this query to ? syntax. Thus, - $query = "insert into biblio set - biblionumber = $bibnum, - title = $biblio->{'title'}, - author = $biblio->{'author'}, - copyrightdate = $biblio->{'copyright'}, - serial = $series, - seriestitle = $biblio->{'seriestitle'}, - notes = $biblio->{'notes'}, - abstract = $biblio->{'abstract'}"; ! $sth = $dbh->prepare($query); ! $sth->execute; should be $query = "insert into biblio set biblionumber = ? title = ? author = ? copyrightdate = ? serial = ? seriestitle = ? notes = ? abstract = ?"; $sth = $dbh->prepare($query); $sth->execute($bibnum,$biblio->{'title'},...); and not ! $dbh->do(<<EOT); ! INSERT INTO biblio ! SET biblionumber = $bibnum, ! title = $biblio->{'title'}, ! author = $biblio->{'author'}, ! copyrightdate = $biblio->{'copyright'}, ! serial = $series, ! seriestitle = $biblio->{'seriestitle'}, ! notes = $biblio->{'notes'}, ! abstract = $biblio->{'abstract'} ! EOT -- Paul