• emailの重複チ
    ェック(MSG08)のみバリデーションされずに,スル...
  • guest 
    emailの重複チェック(MSG08)のみバリデーションされずに,スルーしてトップページに推移してしまいます.
    すでにdb接続は完了しており,新規のメールアドレスであれば登録は問題ありません.
    その他のエラーメッセージに関しては確認済みで問題なくバリデーションできています.
    また,php_error.logでもエラーは検出されませんでした.

    恐らく例外処理がうまく作動されていないと思うのですが,何か考えられる要因はありますでしょうか?

    このように入力しています.

    function validEmailDup($email){
    global $err_msg;
    //例外処理
    try {
    //DB接続
    $dbh = dbConnect();
    //SQL文作成
    $sql = 'SERECT count(*) FROM users WHERE email = :email';
    $data = array(':email' => $email);
    //クエリ実行
    $stmt = queryPost($dbh, $sql, $data);
    //クエリ結果の値を取得
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    if(!empty($result['count(*)'])){
    $err_msg['email'] = MSG08;

    }
    } catch (Exception $e) {
    error_log('エラー発生:' . $e->getMessage());
    $err_msg['common'] = MSG07;

    }
    }

    よろしくお願い致します.
    回答 0

     
    まずここでやりたいことを明確にしましょう。

    ①入力されたメールアドレスの件数を取得する
    ②0件以上であればエラーメッセージMSG08を設定する

    となりますね。

    次に①②について詳しくみてみましょう。

    ①について
    件数を取得するSQLですが、SERECT ではなくSELECT ですね。
    次に取得したい「もの」を考えてみましょう。
    今回は件数が取得できればOKなので
    「PDO select count(*)」とかでぐぐってみてください。

    ②について
    ①で取得した件数を比較すればよいですね

    guest 
    ご回答ありがとうございます。

    SELECTのスペルミスでした。
    スペルを直したところ、解決できました。
    お騒がせしました。

    ログでエラーが出なかったのは、
    ' 'で囲ったことで文字列として正しく作動し、そのまま流れてしまったからエラーにならなかったという認識でよろしいでしょうか?

     
    実際にvar_dumpを使って$resultの中身をみてみましょう。

    あとはvar_dump駆使してどの部分のコードを通っているのか確認してみるのもよいですね。

    そうすればエラーにならなかった原因が深堀りできます。