Bad error message

Meir Guttman <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.dbi.general
Message-ID <!&!AAAAAAAAAAAYAAAAAAAAAKC25OsDcMdGneFIQhy+Pc3CgAAAEAAAAJX2WDKAmW1Gu8MtJVAbjZgBAAAAAA==@guttman.co.il>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.