Saltar al contenido

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

Te traemos la contestación a este atascamiento, o por lo menos eso pensamos. Si tienes inquietudes puedes dejar un comentario, para nosotros será un gusto ayudarte

Solución:

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

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

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

Es decir:

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

  • Pido disculpas por pasar por alto ese error.

Nota al margen: Ambos '".$var."' y '$var' hacer la misma cosa. Puede utilizar cualquiera de los dos, ambos son de 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 puedes usar mysqli_ con un método de declaración preparado:

$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 DOP con una declaración preparada:

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


    
?>
  • Es mejor utilizar declaraciones preparadas para ayudar a proteger contra una inyección de SQL.

NÓTESE BIEN:

Cuando se trata de formularios y matrices POST como se usa / descrito anteriormente, asegúrese de que las matrices POST contengan valores, que se use un método POST para el formulario y que coincida con el nombre attributes para las entradas.

  • Para su información: los formularios se establecen de forma predeterminada en un método GET si no se instruyen explícitamente.

Nota: $_POST['var'] coincidir. $_POST['Var'] Sin coincidencia.

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

Consultar:

  • http://php.net/manual/en/tutorial.forms.php

Error al comprobar las referencias:

  • http://php.net/manual/en/function.error-reporting.php
  • http://php.net/manual/en/mysqli.error.php
  • http://php.net/manual/en/pdo.error-handling.php

Tenga en cuenta que las API de MySQL no se mezclan, en caso de que esté visitando estas preguntas y respuestas y esté utilizando mysql_ para conectarse (y realizar consultas).

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

Consulte lo siguiente sobre esto:

  • ¿Puedo mezclar las API de MySQL en PHP?

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

  • MySql php: compruebe si existe Row

El mysql_* Las funciones están obsoletas 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:

  • http://dev.mysql.com/doc/refman/5.7/en/constraint-primary-key.html
  • http://dev.mysql.com/doc/refman/5.7/en/alter-table.html
  • ¿Cómo comprobar si ya existe un valor para evitar duplicados?
  • Cómo agregar único key a la tabla existente (con filas no únicas)

Debe ejecutar su consulta y agregar comillas simples a $ email en la consulta porque es un stringy quitar el is_resource($query) $ consulta es una string, el $ resultado será el recurso

$query = "SELECT `email` FROM `tblUser` WHERE `email` = '$email'";
$result = mysqli_query($link,$query); //$link is the connection

if(mysqli_num_rows($result) > 0 )....

ACTUALIZAR

Base en su edición simplemente cambie:

if(is_resource($query) && mysqli_num_rows($query) > 0 ){
        $query = mysqli_fetch_assoc($query);
        echo $email . " email exists " .  $query["email"] . "n";

Por

if(is_resource($result) && mysqli_num_rows($result) == 1 ){
        $row = mysqli_fetch_assoc($result);
         echo $email . " email exists " .  $row["email"] . "n";

y estarás bien

ACTUALIZACIÓN 2

Una mejor manera debería ser tener un procedimiento de almacenamiento que ejecute el siguiente SQL pasando el correo electrónico como parámetro

SELECT IF( EXISTS (
                  SELECT *
                  FROM `Table`
                  WHERE `email` = @Email)
          , 1, 0) as `Exist`

y recuperar el valor en php

Pseudocodigo:

 $query = Call MYSQL_SP($EMAIL);
 $result = mysqli_query($conn,$query);
 $row = mysqli_fetch_array($result)
 $exist = ($row['Exist']==1)? 'the email exist' : 'the email doesnt exist';

Después de la validación y antes de INSERT, verifique si el nombre de usuario ya existe, usando mysqli (procedural). Esto funciona:

//check if username already exists
       include 'phpscript/connect.php'; //connect to your database

       $sql = "SELECT username FROM users WHERE username = '$username'";
       $result = $conn->query($sql);

       if($result->num_rows > 0) 
           $usernameErr =  "username already taken"; //takes'em back to form
        else { // go on to INSERT new record

Si te ha resultado provechoso este post, sería de mucha ayuda si lo compartieras con el resto desarrolladores y nos ayudes a dar difusión a nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *