スポンサーリンク

PerlのDBIでバインド変数を使用したSQLがエラーになる場合の対処法

Wondows 上の ActivePerl から DBIモジュールを使って、ODBC 経由で DB に接続した場合、なぜかバインド変数を使用した SQL がエラーになることがあるんですよ。

例えば次のようなソースだと、execute するところでエラーになるんです。

#!/usr/bin/perl

use strict;
use warnings;

use DBI;

my $dbh = DBI->connect("dbi:ODBC:hoge","hoge","fuga");
my $sql = "select name from item where code=?";
my $sth = $dbh->prepare($sql);

open(FH, "<", "item_codes.txt");
while(<FH>){
  chomp;
  $sth->execute($_);
  while(my @data = $sth->fetchrow_array()){
    # いろいろ処理
  }
}
close(FH);
$dbh->disconnect();
 

SQL を書き間違えたかな? と思ってチェックしてみるものの、他のツールを使用して ODBC 経由で SQL を実行するとちゃんと処理されるんですよね。

もっとも、チェックの時にはバインド変数は使ってませんけど。

だったら、バインド変数を使わなければいいんじゃね? という発想のもと、ソースを以下のように書き換えてみると・・・、

#!/usr/bin/perl

use strict;
use warnings;

use DBI;

my $dbh = DBI->connect("dbi:ODBC:hoge","hoge","fuga");

open(FH, "<", "item_codes.txt");
while(<FH>){
  chomp;
  my $sql = "select name from item where code='$_'";
  my $sth = $dbh->prepare($sql);
  $sth->execute();
  while(my @data = $sth->fetchrow_array()){
    # いろいろ処理
  }
}
close(FH);
$dbh->disconnect();
 

今度はちゃんと動くじゃないですかぁ!

理由とか原因はさっぱり分からないのですが、とりあえず動いたからまぁいいか。

スポンサーリンク
コメント
Verify your Comment
Previewing your Comment

This is only a preview. Your comment has not yet been posted.

Working...
Your comment could not be posted. Error type:
Your comment has been posted. Post another comment

The letters and numbers you entered did not match the image. Please try again.

As a final step before posting your comment, enter the letters and numbers you see in the image below. This prevents automated programs from posting comments.

Having trouble reading this image? View an alternate.

Working...

コメントを投稿
トラックバック

このページのトラックバックURL:
https://www.typepad.com/services/trackback/6a01310f1f31c0970c017eea2f6bcc970d

このページへのトラックバック一覧 PerlのDBIでバインド変数を使用したSQLがエラーになる場合の対処法:


プロフィール


  • 書いてる人:夢界 陸

    名古屋在住のおっさん。
    プログラミングやガジェットの話など、 日々の興味を徒然と綴っています。



    Twitterやってます @mukairiku

    運営サイト
    www.mukairiku.net

ブログ内検索

Licenses

  • Creative Commons License

OTHER

  • このブログのはてなブックマーク数

Blog powered by TypePad

スポンサーリンク