mysql:4847
From: "gosikaku" <"gosikaku" <gosikaku@xxxxxxxxxx>>
Date: Thu, 27 Dec 2001 13:14:14 +0900
Subject: [mysql 04847] Re: SELECT が実行できない
宏です 皆さん、わかりにくい質問に対して答えて頂き本当に有難うございます。 更に、お返事が遅くなりました申し訳ございません。 宮川さんに教えて頂いた my $dbh = DBI->connect($dsn, $user, $pass, { RaiseError => 1 }) or die $DBI::errstr; eval { my $sth = $dbh->prepare($sql); $sth->execute; }; if ($@) { warn "SQL error: $@"; } 上記のプログラムを私が最初にメールで記載した、プログラム中に下記の [################宮川さんに教えて頂いた部分はここから]の箇所に挿入 してみたのですが、何も表示されませんでした。 #!perl ###設定### #モジュール&ライブラリの指定 require "jcode.pl"; use CGI_Lite; use DBI; #CGI_Liteをライブラリ関数をコールする為の宣言 $cgi= new CGI_Lite(); #フォームデータを受け取り連想配列(%in)に代入 %in=$cgi->parse_form_data(); ###設定終了### #MySQLの設定 my($dns) = "DBI:mysql:userdb:localhost"; my($username) = "root"; my($password) = "××××"; my($dbh,$sth); my(@ary); $remoteuser = $in{'remoteuser'}; #編集ここから if($in{'mode'} eq it'){ jcode::convert(\$in{'mail'}, 'euc'); if ($in{'mail'} =~ /[\xA1-\xFE][\xA1-\xFE]/ or $in{'mail'} =~ /\x8E/) { print "Content-type: text/html\n\n"; print "メールアドレスは半角英数字で入力して下さい\n"; exit; } if($in{'mail'} && $in{'mail'} !~ /^[\w\+\-\.]+@[\w\+\-]+\.[\w\+\.\-]+$/){ &Error("メールアドレスが正しく入力されていません\n"); } #ここではEUCコードでデータのやり取りをする。 $name = $in{'name'}; &jcode'convert(*name,"euc"); $mail = $in{'mail'};#メール半角英数のみなのでこのまま $nenrei = $in{'nenrei'}; &jcode'convert(*nenrei,"euc"); $zyuusyo = $in{'zyuusyo'}; &jcode'convert(*zyuusyo,"euc"); $seibetu = $in{'seibetu'}; &jcode'convert(*seibetu,"euc"); $dbh = DBI -> connect ($dns, $username, $password) or &Error("データベースへアクセスできません1"); # パスワードの変更があった場合と無かった場合の2つのUPDATE構文を作る。 if($in{'name'}){ $sth = $dbh->prepare( qq{ UPDATE userdb SET name = "$name" WHERE username = "$remoteuser"}); } if($in{'mail'}){ $sth = $dbh->prepare( qq{ UPDATE userdb SET mail = "$mail" WHERE username = "$remoteuser"}); } if($in{'nenrei'}){ $sth = $dbh->prepare( qq{ UPDATE userdb SET nenrei = "$nenrei" WHERE username = "$remoteuser"}); } if($in{'zyuusyo'}){ $sth = $dbh->prepare( qq{ UPDATE userdb SET zyuusyo = "$zyuusyo" WHERE username = "$remoteuser"}); } if($in{'seibetu'}){ $sth = $dbh->prepare( qq{ UPDATE userdb SET seibetu = "$seibetu" WHERE username= "$remoteuser"}); } $sth -> execute() or &Error("UPDATE userdbを実行できません。"); $sth -> finish(); $dbh -> disconnect(); &Reload; } ################宮川さんに教えて頂いた部分はここから my $dbh = DBI->connect($dns, $username, $password, { RaiseError => 1 }) or die $DBI::errstr; $sth = $dbh->prepare( qq{ SELECT * FROM userdb WHERE id = "$remoteuser" }); eval { my $sth = $dbh->prepare($sql); $sth->execute; }; if ($@) { print "Content-type: text/html\n\n"; warn "SQL error: $@"; } ################宮川さんに教えて頂いた部分はここまで $sth -> execute() or &Error("SELECT * FROM userdb・・・を実行できません。"); @ary = $sth->fetchrow_array (); #ここでは面倒かもしれないが、SJISに戻して表示する。 $name = $ary[2]; &jcode'convert(*name, "sjis"); $id = $ary[0]; #ユーザーネームはそのままでも問題ない。 $mail = $ary[3]; &jcode'convert(*mail, "sjis"); $nenrei = $ary[4]; &jcode'convert(*nenrei, "sjis"); $seibetu = $ary[6]; &jcode'convert(*seibetu, "sjis"); $zyuusyo = $ary[5]; &jcode'convert(*zyuusyo, "sjis"); $CurrentUsers .= qq(<tr>\n); $CurrentUsers .= qq(<td width="80">$id</td>\n); $CurrentUsers .= qq(<td width="80">$name</td>\n); $CurrentUsers .= qq(<td width="80">$mail</td>\n); $C urrentUsers .= qq(<td width="80">$nenrei</td>\n); $CurrentUsers .= qq(<td width="160">$seibetu</td>\n); $CurrentUsers .= qq(<td width="80">$zyuusyo</td>\n); $CurrentData .= qq(</tr>\n); $sth -> finish(); $dbh -> disconnect(); print "Content-type: text/html\n\n"; print<<"__HTML__"; <HTML><HEAD><TITLE>ユーザーネーム [$remoteuser]</TITLE></HEAD> <BODY TEXT="#44444" BGCOLOR="#FFFFFF"> <STYLE TYPE="text/css"> <!-- A:link {color:"pink"; text-decoration: "none" ;} A:visited {color:"pink"; text-decoration: "none" ;} A:hover {color:"blue"; text-decoration: "underline" ;} TD { font-size: 11pt; } --> </STYLE> <TABLE WIDTH="100%"><TR><TD> <H2>■ユーザーネーム [$remoteuser] データ</H2> <a href="./1kaiinpage.cgi#edit">個人情報編集</a> <HR SIZE="0"> <P> <B>●現在の[$remoteuser]登録情報は以下のとおりです。</B> <table width="784" cellspacing="0" border="1" bordercolor="gray"> <tr> <td width="80"><b>ID</b></td> <td width="80"><b>名前</b></td> <td width="80"><b>メールアドレス</b></td> <td width="80"><b>年齢</b></td> <td width="160"><b>性別</b></td> <td width="80"><b>住所</b></td> </tr> $CurrentData </table> <P> <HR SIZE="0"><A NAME="edit"></A> <P> <B>●個人情報/パスワード編集</B> <table wdith="625" cellspacing="0" border="1" bordercolor="gray"> <form method="post" action="1kaiinpage.cgi"> <input type="hidden" name="mode" value="edit"> <font size="1">ニックネーム:</font><BR> <INPUT type="TEXT" name="name" size="17"> <BR> <font size="1">メールアドレス:【半角】</font><BR> <INPUT type="TEXT" name="mail" istyle="3" size="17"> <br> 住所:<br> <select name="zyuusyo"> <option selected>住所選択</option> <option>愛知</option> <option>岐阜</option> <option>静岡</option> <option>三重</option> <option>富山</option> <option>石川</option> <option>福井</option> </select> <br> <font size="1">年齢:</font><br> <select name="nenrei"> <option selected>年齢選択</option> <option>9以下</option> <option>10〜14</option> <option>15〜19</option> <option>20〜24</option> <option>25〜29</option> <option>30〜34</option> <option>35〜39</option> <option>40〜44</option> <option>45〜49</option> <option>50〜54</option> <option>55〜59</option> <option>60以上</option> </select> <BR> <font size="1">性別:</font><br> <font size="1">男</font> <input type="radio" name="seibetu" value="男"> <font size="1">女</font> <input type="radio" name="seibetu" value="女"> <BR> <INPUT type="SUBMIT" value="送信"> <INPUT type="RESET" value="取消"> </P> </form> </table> </TD></TR></TABLE> </BODY> </HTML> __HTML__ sub Error { print "Content-type: text/html\n\n"; print $_[0]; print qq(<br><a href="javascript:history.back(1)">戻る</a>); exit; } sub Reload { print "Content-type: text/html\n\n"; print qq(<META HTTP-EQUIV="Refresh" CONTENT="0;URL=./1kaiinpage.cgi">); exit; } なんで何も表示されないのかなぁっと思い if ($@) { print "Content-type: text/html\n\n"; print"test"; warn "SQL error: $@"; } プログラム中の上記の部分に「print"test";」というのを付け加えて、「if ($@)」 は実行されるのか?と思い試してみたところ、ブラウザには「test」と表示され ました。 これは、やはりエラーが発生しているけどエラーメッセージが表示されないだけ と判断して良いのでしょうか? それとも他に、私が最初のメールで質問させてもらった、 ブラウザからフォームでデータベースに登録してあるIDを入力し送信すると 「SELECT * FROM userdb・・・を実行できません。」 というメッセージが表示されるのは他に原因があるのでしょうか?
4834 2001-12-24 15:08 ["gosikaku" <gosikaku] SELECT が実行できない 4836 2001-12-25 00:35 ┗[とみたまさひろ <tomm] 4837 2001-12-25 00:44 ┣["TOYOSHIMA, Masayuki] 4838 2001-12-25 07:13 ┃┗[sin <panocon@xxxxxxx] 4839 2001-12-25 07:28 ┗[Tatsuhiko Miyagawa <] -> 4847 2001-12-27 13:14 ┗["gosikaku" <gosikaku] 4848 2001-12-27 13:20 ┣[Tatsuhiko Miyagawa <] 4849 2001-12-27 13:35 ┗["KAWAI,Takanori" <GC] 4850 2001-12-27 14:27 ┗["gosikaku" <gosikaku]