sql >> データベース >  >> RDS >> Mysql

MySQLに行が存在するかどうかを確認するにはどうすればよいですか? (つまり、メールがMySQLに存在するかどうかを確認します)

    以下は、行が存在するかどうかを確認するための試行、テスト、および実証済みの方法です。

    (私が自分で使用しているもの、または過去に使用したことがあるものもあります。)

    編集: mysqli_query()を使用した構文で以前にエラーが発生しました 2回。リビジョンを参照してください。

    つまり:

    if (!mysqli_query($con,$query)) これは単にif (!$query)と読む必要があります 。

    • その間違いを見逃してしまったことをお詫びします。

    補足: 両方の'".$var."' および'$var' 同じことをします。どちらか一方を使用できます。どちらも有効な構文です。

    編集された2つのクエリは次のとおりです。

    $query = mysqli_query($con, "SELECT * FROM emails WHERE email='".$email."'");
    
        if (!$query)
        {
            die('Error: ' . mysqli_error($con));
        }
    
    if(mysqli_num_rows($query) > 0){
    
        echo "email already exists";
    
    }else{
    
        // do something
    
    }
    

    そしてあなたの場合:

    $query = mysqli_query($dbl, "SELECT * FROM `tblUser` WHERE email='".$email."'");
    
        if (!$query)
        {
            die('Error: ' . mysqli_error($dbl));
        }
    
    if(mysqli_num_rows($query) > 0){
    
        echo "email already exists";
    
    }else{
    
        // do something
    
    }
    

    mysqli_を使用することもできます プリペアドステートメント付き 方法:

    $query = "SELECT `email` FROM `tblUser` WHERE email=?";
    
    if ($stmt = $dbl->prepare($query)){
    
            $stmt->bind_param("s", $email);
    
            if($stmt->execute()){
                $stmt->store_result();
    
                $email_check= "";         
                $stmt->bind_result($email_check);
                $stmt->fetch();
    
                if ($stmt->num_rows == 1){
    
                echo "That Email already exists.";
                exit;
    
                }
            }
        }
    

    またはPDOメソッド プリペアドステートメント付き

    <?php
    $email = $_POST['email'];
    
    $mysql_hostname = 'xxx';
    $mysql_username = 'xxx';
    $mysql_password = 'xxx';
    $mysql_dbname = 'xxx';
    
    try {
    $conn= new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username, $mysql_password); 
         $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
         exit( $e->getMessage() );
    }
    
    // assuming a named submit button
    if(isset($_POST['submit']))
        {
    
            try {
                $stmt = $conn->prepare('SELECT `email` FROM `tblUser` WHERE email = ?');
                $stmt->bindParam(1, $_POST['email']); 
                $stmt->execute();
                while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    
                }
            }
            catch(PDOException $e) {
                echo 'ERROR: ' . $e->getMessage();
            }
    
        if($stmt->rowCount() > 0){
            echo "The record exists!";
        } else {
            echo "The record is non-existant.";
        }
    
    
        }
    ?>
    
    • プリペアドステートメントは、SQLインジェクションから保護するために使用するのが最適です。

    N.B .:

    上記で使用/概説されているフォームとPOST配列を処理するときは、POST配列に値が含まれていること、フォームにPOSTメソッドが使用されていること、入力の名前付き属性が一致していることを確認してください。

    • FYI:明示的に指示されていない場合、フォームはデフォルトでGETメソッドになります。

    注:<input type = "text" name = "var"> -$_POST['var'] マッチ。 $_POST['Var'] 歯が立たない。

    • POST配列では大文字と小文字が区別されます。

    相談する:

    参照のチェックエラー:

    このQ&Aにアクセスしていて、mysql_を使用している場合に備えて、MySQLAPIは混在しないことに注意してください。 接続する(およびクエリする)。

    • 接続からクエリまで同じものを使用する必要があります。

    これについては、以下を参照してください。

    mysql_を使用している場合 APIを使用する選択肢がない場合は、Stackに関する次のQ&Aを参照してください。

    mysql_* 関数は非推奨になり、将来のPHPリリースから削除される予定です。

    • 21世紀に足を踏み入れる時が来ました。

    (a)行にUNIQUE制約を追加することもできます。

    参照:



    1. ORA-29283の解決方法:無効なファイル操作

    2. SQL Serverを使用して、空のスペースをnull値に変換するにはどうすればよいですか?

    3. SQL 2000/2005でOracleデータベースにリンクされたサーバーをどのようにセットアップしますか?

    4. WindowsにSQLServerをインストールする方法