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

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]