Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment vérifier si une ligne existe dans MySQL ? (c'est-à-dire vérifier si un e-mail existe dans MySQL)

Voici des méthodes éprouvées, testées et éprouvées pour vérifier si une ligne existe.

(Certains que j'utilise moi-même ou que j'ai utilisés dans le passé).

Modifier : J'ai fait une erreur précédente dans ma syntaxe où j'ai utilisé mysqli_query() à deux reprises. Veuillez consulter la ou les révisions.

C'est-à-dire :

if (!mysqli_query($con,$query)) qui aurait dû se lire simplement comme if (!$query) .

  • Je m'excuse d'avoir oublié cette erreur.

Remarque : Les deux '".$var."' et '$var' faire la même chose. Vous pouvez utiliser l'un ou l'autre, les deux sont une syntaxe valide.

Voici les deux requêtes modifiées :

$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

}

et dans votre cas :

$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

}

Vous pouvez également utiliser mysqli_ avec une déclaration préparée méthode :

$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;

            }
        }
    }

Ou une méthode PDO avec une déclaration préparée :

<?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.";
    }


    }
?>
  • Il est préférable d'utiliser des instructions préparées pour aider à se protéger contre une injection SQL.

N.B. :

Lorsque vous traitez des formulaires et des tableaux POST tels qu'utilisés / décrits ci-dessus, assurez-vous que les tableaux POST contiennent des valeurs, qu'une méthode POST est utilisée pour le formulaire et que les attributs nommés correspondent aux entrées.

  • Pour votre information :les formulaires utilisent par défaut une méthode GET si ce n'est pas explicitement indiqué.

Remarque :<input type = "text" name = "var"> - $_POST['var'] correspondre. $_POST['Var'] pas de correspondance.

  • Les tableaux POST sont sensibles à la casse.

Consulter :

Erreur lors de la vérification des références :

Veuillez noter que les API MySQL ne se mélangent pas, au cas où vous visiteriez ce Q&R et que vous utiliseriez mysql_ pour se connecter (et interroger avec).

  • Vous devez utiliser le même depuis la connexion jusqu'à l'interrogation.

Consultez à ce sujet :

Si vous utilisez le mysql_ API et que vous n'avez pas le choix de l'utiliser, consultez les questions-réponses suivantes sur Stack :

Le mysql_* sont obsolètes et seront supprimées des futures versions de PHP.

  • Il est temps d'entrer dans le 21e siècle.

Vous pouvez également ajouter une contrainte UNIQUE à (une) ligne(s).

Références :