[前][次][番号順一覧][スレッド一覧]

mysql:9243

From: "KAWAI,Takanori" <"KAWAI,Takanori" <GCD00051@xxxxxxxxxx>>
Date: Wed, 21 Apr 2004 00:30:36 +0900
Subject: [mysql 09243] Re: MySQL+DBI/DBD+Apatchのログについて

川合孝典です。

----- Original Message ----- 
From: "Atusi Taga" <call_function@xxxxxxxxxx>
To: <ml@xxxxxxxxxx>
Sent: Tuesday, April 20, 2004 11:37 PM
Subject: [mysql 09241] MySQL+DBI/DBD+Apatchのログについて


> はじめまして多賀@アルカディアと申します。
>
> MySQL+DBI/DBD+Apatch+Perlで質問させて下さい。
ウーンとApacheですよね?

> $sth = $db->prepare("SELECT * FROM hoge_table where year=$ARGV[1]
ApacheでCGIとして実行させようとしているのではないでしょうか?
そのときに$ARGV[1]の値はどのように設定されているのでしょうか?
これが空になっている可能性が高いと思われます。

(中略)
> DBD::mysql::st fetchrow_array failed: fetch() without execute() at
> /Library/WebServer/CGI-Executables/nabunken_setumei/setumei.pl line
> 38.
>
> このようなエラーメッセージがApatchのログに書き込まれます。
その前に
 DBD::mysql::st execute failed ...
というメッセージも出力されていると思うのですが、いかがですか?

> この現象を回避する方法をご存知でしたら教えて下さい。

とりあえず以下のようにすれば、エラーは抑えることができるでしょう。
#プレースホルダを使って、executeで指定
#これなら$ARGV[1]がundefでもとりあえずエラーにはならないはず

ただし$ARGV[1]で何がしたいのか不明です。
CGIパラメータがとりたいのであれば、CGI.pmなどを利用したほうが
いいでしょう。
#参考: CGI.pm http://member.nifty.ne.jp/hippo2000/perltips/Cgi.htm
#yearの完全一致なのにorder byの項目というのも...

またDBIの常識として
(1)use strict(Perlの常識レベルですが)、プレースホルダを
 使ったほうがよいでしょう。
(2)rowsをexecute直後に使うのは移植性を損なうもとになります
  この時点では行数が特定できないDBMSもあります(ex. Oracle)
#fetchrow_arrayよりfetchrow_arrayrefのほうが好きっていうか効率的

#!/usr/bin/perl -w
use strict;
use DBI;
my $db = DBI->connect('dbi:mysql:test', 'usr', 'pwd',
 {RaiseError => 1, AutoCommit => 1})
 or die("ERROR:" . DBI->errstr());
my $sth = $db->prepare(
  "SELECT * FROM hoge_table where year=? order by year
   desc,month desc,mday desc");
$sth->execute($ARGV[1]);
my $num_rows = $sth->rows;
my @tmp=$sth->fetchrow_array;
print join(',', @tmp), "\n";

何を参考にこのスクリプトを書かれたのかわかりませんが、
ことDBIに関連してはuse strictが書いてないようなスクリプトは、
あまり信用しないほうがいいでしょう。
DBIのドキュメントに
   (The use strict; isn't required but is strongly recommended.)
と入ってから4年ぐらい経つんですから。

===================================================
川合 孝典 (Hippo2000)
   DBI日本語メーリングリスト管理人、Kansai.pm所属
   kwitknr@xxxxxxxxxx GCD00051@xxxxxxxxxx
   http://member.nifty.ne.jp/hippo2000http://www.hippo2000.info/
perldocの日本語情報ならperldocjp:翻訳してみませんか?
  http://perldocjp.sourceforge.jp/
===================================================


[前][次][番号順一覧][スレッド一覧]

      9241 2004-04-20 23:37 ["Atusi Taga" <call_f] MySQL+DBI/DBD+Apatchのログについて    
->    9243 2004-04-21 00:30 ┣["KAWAI,Takanori" <GC]                                       
      9260 2004-04-22 10:56 ┃┗[yoshi <yosihisa@xxxx]                                     
      9278 2004-04-23 01:23 ┃ ┗["KAWAI,Takanori" <GC]                                   
      9247 2004-04-21 09:41 ┗[Takasi Watanabe <off]