• ベストアンサー

このエラーの意味は何?

windowsでPerlDBIを使ったCGIでプログラムを作っています。 DBはpostgreSQL8.0です。 実行後、このようなエラーメッセージが出ました。 DBI::db=HASH(0x1ccec3c)->disconnect invalidates 1 active statement handle (eithe r destroy statement handles or call finish on them before disconnecting) at C:\public_html\cgi-bin\games\schedule.cgi line 130 このエラーはどういう意味なんでしょうか? またこのエラーを回避、修正するにはどうしたらよいのでしょうか?

  • Perl
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
noname#25358
noname#25358
回答No.1

 不正なステートメントハンドルを切断しました。どちらかのステートメントハンドルを殺すか、もしくは切断前に全ての処理を終わらせてください。  直訳するとこうなります。  何か参考になりますか?  あと、1つのハンドルで複数のクエリーをフェッチしようとしていないかもチェックしてください。  もし複数のハンドルを同時に確保する処理がある場合、そのような挙動がサーバー側で許可されているかもチェックしてください。

tukikageran
質問者

お礼

ありがとうございました。 ステートメントハンドルでfinishをしていない箇所が ありました。 おかげさまで解決しました。

関連するQ&A

  • PerlでSQLiteを使おうとしてもうまく行きません

    下記のような感じでPerlプログラムからSQLiteのデータベースから読み出すプログラムを組んでみました。 もちろん、実際にデータベースのファイルを作ってあります。 下のように、かなりシンプルで簡単なプログラムですし、 間違ってもいないとは思うのですが・・・ use DBI; $db = DBI->connect("dbi:SQLite:dbname=accountdb","","",); $sth = $db->prepare("SELECT * FROM user"); $sth->execute;#結果を取得しresに代入 print "$sth\n"; $sth->finish; exit; 上を実行した結果は、下記の通りです。 DBI::st=HASH(0x32706c4) closing dbh with active statement handles during global destruction. 私が思うに、データが$sthに帰って来ると思うのですが、 実際にはDBI::st=HASH(*****)のようなものしかかえってきません アドバイスをどうか宜しく御願いします (別カテゴリで似たような質問をさせていただきましたが、これはまた別です・・・)

  • perlからmysqlに接続できない

    #! c:/perl/bin/perl  use DBI; $user = 'root'; $passwd = 'パスワード'; $db = DBI->connect('DBI:mysql:db1:localhost', $user, $passwd); $sth = $db->prepare("INSERT INTO bunrui VALUES (1,'1st','memo')"); $sth->execute; $sth->finish; $db->disconnect; perlからmysql二接続するためDBIをインストールして、上のようなサンプルコードを実行してみたのですが Internal Server Error になってしまいます。どこかコードが違っているのでしょうか?

    • ベストアンサー
    • Perl
  • SQLで別テーブルの参照

    こんにちは。 PostgreSQL+Perl+DBIでCGIを書いています。 テーブルからデータを取得する場合なのですが、table1にはIDのみが登録されていて、table2には、そのIDに対する文字列が登録されているとします。 このような場合に、tableからIDを取得して、そのIDに対するtable2の文字列を一気に取得することは可能でしょうか? つまり、 $dbh=DBI->connect(~); $sth=$dbi->prerare("SELECT id FROM table1 WHERE ~;"); $sth->excecute(); $id=$sth->fetchrow; $sth->finish(); $sth=$dbi->prerare("SELECT str FROM table2 WHERE id=$id;"); $sth->excecute(); $str=$sth->fetchrow; $sth->finish(); $dbh->disconnect(); といった処理をこんな感じに一度に行いたいのです。 $dbh=DBI->connect(~); $sth=$dbi->prerare("~~~~~;"); $sth->excecute(); $str=$sth->fetchrow; $sth->finish(); $dbh->disconnect(); 可能かどうかもわからないのですが、なにか良い方法はありますでしょうか?よろしくお願いします。

  • perlのDBIからmysqlにINSERTINTOをやっても追加されない。help!!

    助けてください、お願いします。 phpadminで管理しているmysqlのDBへ、perlのDBIモジュールを使ってレコードの追加(INSERTINTO)をやっても、phpadminでDBをみてみると追加されていません。 DBIを組み込んだCGIを実行してみてもエラーはでないのですが、DBへの追加ができていません。 色々とやってみたのですが、どうしても追加ができません。考えられる要因があれば教えてください、お願いします。ソースは以下の通りです。 use DBI; $dbh=DBI->connect('DBI:mysql:データベース名:サーバホスト','ユーザ名','パスワード') or die $DBI::errstr; $sthandler = $dbh->prepare("INSERT INTO `table名` (`姓`, `名`, `メールアドレス`, `年齢`) VALUES ('名字', '名前', 'mailaddress', '0')"); $sthandler->execute; $sthandler->finish(); $dbh->commit; $dbh->rollback; $dbh->disconnect; 本当に困っています。どうかお助けください。

    • ベストアンサー
    • MySQL
  • ステートメントハンドルのクローズに失敗?

    お世話になります。 早速ですが、WindowsXP+perl5.8.8+sqlite3の環境で以下のようなプログラムを作成しました。 #!/usr/bin/perl use DBI; $mydb = "mokdb"; $hDB = DBI->connect( "dbi:SQLite:dbname=$mydb","","",{PrintError=>0} ); $sql = "select * from tshoku"; $sth = $hDB->prepare($sql); my $rv = $sth->execute; while( my $rs = $sth->fetchrow_hashref ){ print $rs->{'ts_key'},"\n"; } $sth->finish; $hDB->disconnect; exit; これを実行すると、テーブル"tshoku"内の項目"ts_key"がずらっと表示されるのですが、その後、$hDB->disconnect;のタイミングで "closing dbh with active statement handles" という警告が表示されます。 $hDB->disconnect;の直前にステートメントハンドルはクローズしているにもかかわらずこのような警告が表示されてしまうのは何故でしょうか?

    • ベストアンサー
    • Perl
  • Ruby/DBI で.modeを使う方法

    sqlコマンドで.mode htmlを使ってからselectすると テーブルで返ってくるのでそのままrubyでも出力できるとコードが短くなって楽だと思ったんですが、うまくできません。 どうかやり方をお教えください。 rubyを始めたばかりでexecuteの実行結果がどのような構造になっているかもよくわかりません。 こちらの方もお教えいただけると幸いです。 下記のような使い方をしたいです。 <%# -*- coding:shift_jis -*- %> <% require 'rubygems' # RubyGems のインストール %> <% require 'dbi' #DBIの利用 %> <% dbh=DBI.connect('DBI:SQLite3:fruits.db') %> <% #HTML形式で受け取る %> <% #dbh.do(".mode html;") %> <%# execute select statement%> <% sth=dbh.execute("select * from fruits;") %> <html> <head> <meta http-equiv="Context-Type" content="text/html;charset Shift_JIS"/> <title>フルーツ管理</title> </head> <body> <% #テーブルで出力 %> <table> <%#=sth %> </table> </body> </html> <%# relese results %> <% sth.finish %> <%# disconnect database %> <% dbh.disconnect %>

  • データベース接続エラー

    質問させて頂きます。 環境はWin98SE ACTIVEPERLです。 mysql4.0です。 次のコードなんですか、 DB接続の部分とSQL実行の部分のエラー処理を消すと正常に動作します。 Perlの場合、どのようにエラー処理を記入したらいいのでしょうか? [コード] #!c:\perl\bin\perl.exe # DBI利用宣言 use DBI; print "Content-type: text/html\n\n"; print "<html><body>\n"; # MySQLに接続 $db=DBI->connect('DBI:mysql:test:localhost','',''); if(!$db){  print "MySQL接続エラー\n";  exit; } # ステートメントハンドルの作成:SQL文の指定 $sth = $db->prepare("select * from test_t"); # SQL実行 if(!$sth->execute()){  print "SQL実行エラー\n";  exit; } # 検索結果を表示 while (@rec = $sth->fetchrow_array()) {  print "id=" . $rec[0] . "\n";  print "name=" . $rec[1] . "\n";  print "<BR>\n"; } # ステートメントハンドルクリア $sth->finish();

    • ベストアンサー
    • Perl
  • Webからの登録

    oracle初心者ですが、よろしくお願いします。 下記のようなスクリプト(Perl)を作成し、コマンドプロンプトで実行したところoracleへ登録することができましたが、cgiとして実行すると接続の際にエラーがでます。 権限の問題かと思いましたが、windowsでは特にそのような設定はないとのことでした。 また、mysqlで同じようなcgiを作成したところ、成功しました。 どなたかわかる方、教えていただけませんでしょうか? $hDb = DBI->connect("dbi:Oracle:orcl", "test/test") or die "CONNECT ERROR $DBI::ERRSTR"; $sth = $hDb->prepare("UPDATE test SET NAME='$NAME' WHERE ID='$ID'"); $sth->execute; $sth->finish; $hDb->disconnect; こちらの環境は以下の通りです。 ActivePerl5.8.7 windows2003server standard edition oracle9i よろしくお願いします。

  • Perlccを使ったCGIプログラムのバイナリ化

    こんにちは Perlを使ったデータベースをselectするCGIプログラムをバイナリ化したいと考えております。 環境:RedHat, postgreSQL Perl: v5.8.0 built for i386-linux-thread-multi # perlcc target.cgi とコマンド実行したところ、バイナリ化はできるものの、WEBから実行すると、以下のエラーがでてしまいます。 Undefined subroutine &DBI::dr::disconnect_all called at /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/DBI.pm line 575. 解決策をご存知の方、お願いいたします。

  • 文法はあってるのにサーバーエラーが出る

    perlで構文チェックをしたところ、OKが出たので、 アパッチにて実行したところサーバエラーがでました。 調べたところ、以下のようなエラーが出ましたが、これは、サブルーチンや、ライブラリが呼出されていないのでしょうか?どのように対処すればいいか教えてください。 Premature end of script headers: c:/www/public_html/subsub.cgi Undefined subroutine &jcode::convent called at c:\WWW\PUBLIC~1\SUBSUB.CGI line 8. Premature end of script headers: c:/www/public_html/okikae.cgi Can't locate cgi-bin.pl in @INC (@INC contains: C:/usr/local/lib C:/usr/local/site/lib .) at c:\WWW\PUBLIC~1\OKIKAE.CGI line 3.

    • 締切済み
    • CGI

専門家に質問してみよう