Dear DBI folks, The other day I had a trivial typo in my DBI SQL query that gave me an outlandish error message and grief. So outlandish that I spent two hours looking for the culprit.
All it was is a missing closing back-tic in the db name part of the `database_name`.`table_name` SQL clause, see the code. Here is the test program: <code> use strict; use warnings; use utf8; use DBI; my %conn_attrs = ( RaiseError => 0, PrintError => 0, AutoCommit => 1, mysql_enable_utf8 => 1, ); my $dbh = DBI->connect ( 'DBI:mysql:test:localhost', 'my_account', 'secret', \%conn_attrs ); my $sql = qq( REPLACE INTO `test.`params` -- missing ^ -- back-tick | -- here ----------+ (`ID`,`AsOf_date`,`Value`) VALUES (?,?,?) ); my $sth = $dbh->prepare($sql) // die "'prepare' error:\n$DBI::errstr"; my $affected = $sth->execute('0123', '2014-06-24', 1000) // die "'execute' error:\n$DBI::errstr"; $affected += 0; print "$affected row was inserted"; __END__ </code> This resulted with the following error message: 'execute' error: called with 3 bind variables when 0 are needed at DBI_error_test.pl line 31. Wherefrom in Scott's name did you take the idea that "... 0 (bind variables) are needed...???" BTW, executing the very same SQL in MySQL WorkBench resulted with a straight forward "Syntax error ..." Well, IMHO, MySQL does not, repeat does not, merit any reward for clear and meaningful error messages. But this DBI/DBD one might be a winner. Is that a bug or is there a good reason for that? And finally Versions: ======== OS: Win 7 (Fully updated) Strawberry Perl 5.18.2 MySQL 5.5.25a perl module installed latest ---------- --------- ------- DBI 1.6300 1.6310 DBD::ODBC 1.4700 1.5000 DBD::mysql 4.0250 4.0270 Regards, MeirG