Mysql
 sql >> Database >  >> RDS >> Mysql

Come verificare se esiste una riga in MySQL? (cioè controlla se esiste un'e-mail in MySQL)

I seguenti sono metodi provati, testati e provati per verificare se esiste una riga.

(Alcuni dei quali li uso io stesso, o li ho usati in passato).

Modifica: Ho commesso un errore precedente nella mia sintassi in cui ho usato mysqli_query() due volte. Si prega di consultare le revisioni.

Cioè:

if (!mysqli_query($con,$query)) che dovrebbe essere letto semplicemente come if (!$query) .

  • Mi scuso per aver trascurato l'errore.

Nota a margine: Entrambi '".$var."' e '$var' fare la stessa cosa. Puoi usarne uno qualsiasi, entrambi sono sintassi validi.

Ecco le due query modificate:

$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

}

e nel tuo caso:

$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

}

Puoi anche utilizzare mysqli_ con una dichiarazione preparata metodo:

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

            }
        }
    }

O un metodo PDO con una dichiarazione preparata :

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


    }
?>
  • Le istruzioni preparate sono utili per proteggere da un'iniezione SQL.

NB:

Quando hai a che fare con i moduli e gli array POST come usato/descritto sopra, assicurati che gli array POST contengano valori, che venga utilizzato un metodo POST per il modulo e che corrisponda agli attributi denominati per gli input.

  • Cordiali saluti:per impostazione predefinita, i moduli utilizzano un metodo GET se non espressamente indicato.

Nota:<input type = "text" name = "var"> - $_POST['var'] partita. $_POST['Var'] nessuna corrispondenza.

  • Gli array POST fanno distinzione tra maiuscole e minuscole.

Consulta:

Errore durante il controllo dei riferimenti:

Tieni presente che le API MySQL non si mescolano, nel caso tu stia visitando queste domande e risposte e stai utilizzando mysql_ con cui connettersi (e interrogare).

  • Devi utilizzare lo stesso dalla connessione alla query.

Consultare quanto segue a riguardo:

Se stai usando mysql_ API e non hai scelta per lavorarci, quindi consulta le seguenti domande e risposte su Stack:

Il mysql_* le funzioni sono deprecate e verranno rimosse dalle future versioni di PHP.

  • È ora di entrare nel 21° secolo.

Puoi anche aggiungere un vincolo UNIQUE a (a) righe.

Riferimenti: