• ベストアンサー

mySQLで結果が無いときの処理

$sql = "select * from test "; $sql .= "where id='".$_POST["id"]."' and pwd='".$_POST["pwd"]."'"; $result = mysql_query($sql); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { if($row){ $msg = "OK"; } } としていますが、NGのときってどういう風にしたらいいのでしょうか? 基本的なことですみませんが、教えてください。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { $msg = "OK"; } if(!$msg) $msg="NG"; でよいのでは? whileのなかでif($row)をするのはナンセンスでしょう。 $rowがあるからwhileがまわっているのだから・・・ ただ普通ならmysql_num_rows()で処理する方がスマートだとはおもいますが・・・

eccschool
質問者

補足

ご返答有難うございます。 いつもいつもご返答頂き感謝しております。 そういうことですね。 シンプルに考えるべきでした。 もっと勉強しなくては・・。

その他の回答 (1)

  • gun_boxer
  • ベストアンサー率18% (2/11)
回答No.1

質問の前に、そのSQLだと「SQLインジェクション」なり、IDやパスワードに不正な値が入り、SQLがエラーになることがあるかと思います。 受け取った値をそのまま、変数として扱ったり、SQLにそのまま代入してしまうのは、極めて危険です。シングルクォーテーションとか入れたらコケませんか?大丈夫ですか? それはさておき、 OKと言うのは、認証が通った時のことですよね? それに対して、NGは認証が通らなかった時ですよね? それに対して、どのようにするかは、やりたいようにすればいいのではないでしょうか。 僕でしたら、入力画面に戻り、「IDまたはパスワードが間違っています」とか表示させますが。OK時の処理として、今回$msg = "OK";と記述しているなら、そのelseで何か処理書いてはいかがですか?

eccschool
質問者

補足

SQLインジェクションの件は理解しています。 elseで書いても反応しなかったので困っています。 よろしくお願いします。

関連するQ&A