sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo verificar si existe una fila en MySQL? (es decir, compruebe si existe un correo electrónico en MySQL)

Los siguientes son métodos probados y probados para verificar si existe una fila.

(Algunos de los cuales uso yo mismo o he usado en el pasado).

Editar: Cometí un error anterior en mi sintaxis donde usé mysqli_query() dos veces. Por favor consulte la(s) revisión(es).

Es decir:

if (!mysqli_query($con,$query)) que debería haberse leído simplemente como if (!$query) .

  • Me disculpo por pasar por alto ese error.

Nota al margen: Ambos '".$var."' y '$var' hacer la misma cosa. Puede usar cualquiera de los dos, ambos son sintaxis válida.

Aquí están las dos consultas editadas:

$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

}

y en tu 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

}

También puede usar mysqli_ con una declaración preparada método:

$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 método PDO con una declaración preparada :

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


    }
?>
  • Las declaraciones preparadas son mejores para ayudar a proteger contra una inyección SQL.

N.B.:

Cuando trabaje con formularios y matrices POST como se usa/describió anteriormente, asegúrese de que las matrices POST contengan valores, que se use un método POST para el formulario y que coincidan los atributos con nombre para las entradas.

  • FYI:los formularios tienen un método GET predeterminado si no se indica explícitamente.

Nota:<input type = "text" name = "var"> - $_POST['var'] partido. $_POST['Var'] Sin coincidencia.

  • Las matrices POST distinguen entre mayúsculas y minúsculas.

Consultar:

Error al verificar las referencias:

Tenga en cuenta que las API de MySQL no se entremezclan, en caso de que esté visitando estas preguntas y respuestas y esté usando mysql_ para conectarse con (y consultar con).

  • Debe usar el mismo desde la conexión hasta la consulta.

Consulta lo siguiente al respecto:

Si está utilizando mysql_ API y no tiene otra opción para trabajar con ella, consulte las siguientes preguntas y respuestas en Stack:

El mysql_* Las funciones están en desuso y se eliminarán de futuras versiones de PHP.

  • Es hora de entrar en el siglo XXI.

También puede agregar una restricción ÚNICA a (una) fila(s).

Referencias: