Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como verificar se existe uma linha no MySQL? (ou seja, verifique se existe um e-mail no MySQL)


A seguir estão métodos testados, testados e comprovados para verificar se existe uma linha.

(Alguns dos quais eu mesmo uso, ou usei no passado).

Editar: Eu cometi um erro anterior na minha sintaxe onde usei mysqli_query() duas vezes. Consulte a(s) revisão(ões).

Ou seja:

if (!mysqli_query($con,$query)) que deveria ser lido simplesmente como if (!$query) .
  • Peço desculpas por ignorar esse erro.

Observação: Ambos '".$var."' e '$var' Faça a mesma coisa. Você pode usar qualquer um, ambos são sintaxe válida.

Aqui estão as duas 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

}

e no seu 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

}

Você também pode usar mysqli_ com uma declaração 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;

            }
        }
    }

Ou um método PDO com uma declaração 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.";
    }


    }
?>
  • As instruções preparadas devem ser usadas para ajudar a proteger contra uma injeção de SQL.

N.B.:

Ao lidar com formulários e matrizes POST conforme usado/delineado acima, certifique-se de que as matrizes POST contenham valores, que um método POST seja usado para o formulário e atributos nomeados correspondentes para as entradas.
  • FYI:os formulários são padronizados para um método GET se não forem explicitamente instruídos.

Observação:<input type = "text" name = "var"> - $_POST['var'] partida. $_POST['Var'] nenhuma partida.
  • As matrizes POST diferenciam maiúsculas de minúsculas.

Consultar:

Referências de verificação de erros:

Observe que as APIs do MySQL não se misturam, caso você esteja visitando esta seção de perguntas e respostas e esteja usando mysql_ para se conectar (e consultar).
  • Você deve usar o mesmo desde a conexão até a consulta.

Consulte o seguinte sobre isso:

Se você estiver usando o mysql_ API e não tiver opção de trabalhar com ela, consulte as seguintes perguntas e respostas no Stack:

O mysql_* funções estão obsoletas e serão removidas de futuras versões do PHP.
  • É hora de entrar no século 21.

Você também pode adicionar uma restrição UNIQUE a (uma) linha(s).

Referências: