日向夏特殊応援部隊

俺様向けメモ

生 DBI ユーザーのための DBI Cookbook (4)

さてと、モバゲーオープンプラットフォームが先日やっと始まりました^^
みなさん是非遊んで下さいです。

d:id:ZIGOROu:20091125:1259163476 のさらに続編です。

ShowErrorStatement でエラー時に発行されていたクエリを表示する

#!/usr/bin/perl

use Carp;
use DBI;

my $dbh;

eval {
  $dbh = DBI->connect("dbi:mysql:db=test;host=localhost", "root", "", +{
      RaiseError => 1, AutoCommit => 0,
      ShowErrorStatement => 1, PrintWarn => 0,
      PrintError => 0,
  }) or croak($DBI::errstr);
  $dbh->selectall_arrayref("SELECT id, name, town FROM hidek WHERE id = ? AND name = ?", undef, "over", "reaction") or croak($dbh->errstr);
};
if ($@) {
    confess($@);
}

ってやると、

DBD::mysql::db selectall_arrayref failed: Unknown column 'town' in 'field list' [for Statement "SELECT id, name, town FROM hidek WHERE id = ? AND name = ?"] at - line 14.
 at - line 17

こんな感じのエラーになります。PrintError => 0, PrintWarn => 0 とかになってないと STDERR にメッセージが出ちゃうのでそれは消しておきました。

ちなみに $dbh->{Statement}, $sth->{Statement} で直近のクエリ自体を取得する事が出来ます。