1

データベースに追加される新しい電子メールアドレスが既にそこにあるかどうかを確認することになっている次の機能があります。

function duplicate_email($email_y){
    $dbCon = db_connect();
    $sql = "SELECT email FROM users WHERE email = ?";
    if ($stmt = mysqli_prepare($dbCon, $sql)) {

        mysqli_stmt_bind_param($stmt, "s", $email_y);
        mysqli_stmt_execute($stmt);
        //mysqli_store_result($dbCon);
        $rows = mysqli_stmt_num_rows($stmt);

        if($rows == 1){
            mysqli_stmt_close($stmt);
            mysqli_close($dbCon);
            return true;
            }
        else{
            mysqli_stmt_close($stmt);
            mysqli_close($dbCon);
            return false;
        }     
    }
}

これは私がそれを使用する場所です:

if(duplicate_email($email) == true){
    echo 'Email [ '.$email.' ] seems to be already used';
}

問題は、検出されないことです。データベースにある電子メールアドレスでテストしましたが、失敗しました。存在しないように通過します。失敗した場所はありますか?どうも

4

1 に答える 1

1

これはあなたの質問に答えないかもしれませんが、防御的なプログラミング スタイルではif ($rows >= 1)、テスト用の電子メール アドレスがデータベースに複数回含まれている場合に備えて、ステートメントを次のように変更することをお勧めします。

if ($stmt = mysqli_prepare...)また、 true を返さない場合も処理する必要があります。コードの残りの部分にフォールスルーし、何も返さないため、false と解釈される可能性があります。少なくとも、失敗した場合はデバッグ コードを出力します (または例外を発生させます)。

于 2013-01-28T23:17:02.287 に答える