• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MySQL接続後の比較演算子について)

MySQL接続後の比較演算子について

このQ&Aのポイント
  • 指定した文字列とデータベースにセットされている文字列を比較して、マッチしたら該当のカラムにセットされている文字列を吐き出し、マッチしない場合は、エラー文を走らせるプログラムを構築しています。
  • スクリプト1とスクリプト2では、条件分岐のif文で比較演算子の使い方が異なります。スクリプト1では、条件が一致しない場合に特定の処理を行っていますが、スクリプト2では条件が一致しない場合に別の特定の処理を行っています。
  • データベースからデータを引っ張ってくる段階で、比較演算子に制約はありませんが、表示させる際の条件分岐や演算子の使い方に注意が必要です。

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

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

>> whileで表示させる際に条件分岐や演算子の特別な制約があるのでしょうか? ありません。 強いて言えばwhileに関係なく、「==」よりも「===」を、「!=」よりも「!==」を常に用いるべきだというぐらい。 http://www.crystal-creation.com/web-appli/technical-information/programming/php/grammar/operator/comparison.htm テスト用のカラムデータと期待する結果が示されていないので何とも言えませんが、とりあえずSQL文で全部フェッチしてきてPHP側でフィルタリングするようじゃデータベース使ってる意味がないので、SQL文にWHERE句を追加して条件をつけてみてはどうでしょう?というかこれが一般的な方法です。 $stmt = $stmt->prepare('SELECT id, usr_name, mail, question, answer FROM テーブル名 WHERE mail = ? AND question = ? AND answer = ?'; $stmt->execute(array($mail, $question, $answer)); なお、$stmtは直接foreachにかけることが出来ます。whileよりもこちらを用いるべきです。 その他PDOの扱いなどまとめたページがあるのでこちらをご覧ください。 http://qiita.com/mpyw/items/b00b72c5c95aac573b71

nazal2010
質問者

お礼

ご回答をいただき、ありがとうございます。 やはりWHEREを使用するべきだったのですね。 当初はWHEREで絞込みを行い、結果を吐き出す仕様にしておりましたが、 私の書き方が悪く意図しない結果になってしまったので、 最終的にselectした結果に対して条件分岐と比較演算子を用いて処理していました。 ご教示いただいた内容で正常に走りました。 それと、PHP5.5に向けて重い腰を上げてPDOを使用することにしたのですが、 まだまだ勉強する必要があるようですね。 参考URLも添付していただき大変恐縮です。 大変助かりました。ありがとうございました。

その他の回答 (1)

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.2

ループ処理なので、チェックした結果でexitしていなければ当然次のデータを読むのですが、それを忘れていませんか? 最初の構文では、 まず一致したデータがあるかどうか調べる ・ 一致データ → 該当データを表示して終了 ・ 不一致データ → 次のデータを読む 最後まで読んで終了していなければ(一致したデータがなければ)該当なしを表示しています。 #このときに、再度データを読んで不一致データの存在を確認しているのが謎です。これはまったく不要で、いきなり該当データなしを表示してかまいませんよね(一致してexitしていないんですから)。 で、2番目の構文では不一致のデータがあるかどうかを調べています ・ 不一致データ → 「該当なし」を表示して終了 ・ 一致データ → 次のデータを読む つまり1件でも不一致のデータがあったら「該当なし」になります(全データが一致データでないとダメ)。

nazal2010
質問者

お礼

ご回答をいただき、ありがとうございます。 >チェックした結果でexitしていなければ当然次のデータを読む これはexit関数にステータスを加えて、という意味でしょうか? whileループを使用しておりましたので、当然exit関数関数を使用して 制御していましたが、なるほどステータスを付加する必要がある という事ですね。 大変参考になりました。ありがとうございました。

関連するQ&A