sql >> Databáze >  >> RDS >> Mysql

Jak zkontrolovat, zda existuje řádek v MySQL? (tj. zkontrolujte, zda e-mail v MySQL existuje)

Následují vyzkoušené, testované a osvědčené metody, jak zkontrolovat, zda řádek existuje.

(Některé z nich používám sám nebo jsem je používal v minulosti).

Upravit: Udělal jsem předchozí chybu v syntaxi, kde jsem použil mysqli_query() dvakrát. Přečtěte si prosím revize.

T.j.:

if (!mysqli_query($con,$query)) což by se mělo jednoduše číst jako if (!$query) .

  • Omlouvám se za přehlédnutí této chyby.

Poznámka: Oba '".$var."' a '$var' udělat to samé. Můžete použít kterýkoli z nich, oba jsou platnou syntaxí.

Zde jsou dva upravené dotazy:

$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

}

a ve vašem případě:

$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

}

Můžete také použít mysqli_ s připraveným výpisem metoda:

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

            }
        }
    }

Nebo metoda PDO s připraveným výpisem :

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


    }
?>
  • Připravené příkazy je nejlepší použít k ochraně před injekcí SQL.

Pozn.:

Při práci s formuláři a poli POST, jak je použito/nastíněno výše, se ujistěte, že pole POST obsahují hodnoty, že je pro formulář použita metoda POST a že vstupy odpovídají pojmenovaným atributům.

  • Pro informaci:Formuláře jako výchozí používají metodu GET, pokud nejsou výslovně uvedeny.

Poznámka:<input type = "text" name = "var"> - $_POST['var'] zápas. $_POST['Var'] žádná shoda.

  • Pole POST rozlišují velká a malá písmena.

Poraďte se:

Chyba při kontrole referencí:

Vezměte prosím na vědomí, že rozhraní MySQL API se nekombinují, pro případ, že navštěvujete tyto otázky a odpovědi a používáte mysql_ spojit se (a dotazovat se).

  • Při připojování k dotazování musíte použít stejný.

Přečtěte si o tom následující:

Pokud používáte mysql_ API a nemáte jinou možnost s ním pracovat, pak si přečtěte následující otázky a odpovědi na Stack:

mysql_* funkce jsou zastaralé a budou odstraněny z budoucích verzí PHP.

  • Je čas vykročit do 21. století.

Do (a) řádků můžete také přidat omezení UNIQUE.

Reference:



  1. Vrácení uložených procedur a funkcí v databázi SQL Server:ROUTINES (příklady T-SQL)

  2. Existuje nějaký rozdíl mezi !=a <> v Oracle Sql?

  3. Jak změnit tabulku v Oracle

  4. Jak mohu zabít všechny relace připojující se k mé databázi Oracle?