sql >> Databasteknik >  >> RDS >> Mysql

Hur kontrollerar man om en rad finns i MySQL? (dvs kontrollera om ett e-postmeddelande finns i MySQL)

Följande är beprövade, testade och beprövade metoder för att kontrollera om en rad finns.

(Varav en del använder jag själv, eller har använt tidigare).

Redigera: Jag gjorde ett tidigare fel i min syntax där jag använde mysqli_query() dubbelt. Se versionen/revisionerna.

Dvs:

if (!mysqli_query($con,$query)) som helt enkelt borde ha lästs som if (!$query) .

  • Jag ber om ursäkt för att jag förbise det misstaget.

Sidoanteckning: Båda '".$var."' och '$var' gör samma sak. Du kan använda endera, båda är giltig syntax.

Här är de två redigerade frågorna:

$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

}

och i ditt fall:

$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

}

Du kan också använda mysqli_ med ett förberett uttalande metod:

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

            }
        }
    }

Eller en PDO-metod med ett förberett uttalande :

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


    }
?>
  • Förberedda satser är bäst att användas för att skydda mot en SQL-injektion.

OBS:

När du hanterar formulär och POST-matriser som används/skisseras ovan, se till att POST-matriserna innehåller värden, att en POST-metod används för formuläret och matchar namngivna attribut för ingångarna.

  • FYI:Formulär är som standard en GET-metod om det inte uttryckligen anges.

Obs:<input type = "text" name = "var"> - $_POST['var'] match. $_POST['Var'] ingen match.

  • POST-matriser är skiftlägeskänsliga.

Konsultera:

Fel vid kontroll av referenser:

Observera att MySQL API:er inte blandas, om du kanske besöker denna Q&A och du använder mysql_ att ansluta till (och fråga med).

  • Du måste använda samma från att ansluta till att fråga.

Konsultera följande om detta:

Om du använder mysql_ API och har inget val att arbeta med det, konsultera sedan följande frågor och svar på Stack:

mysql_* funktioner är föråldrade och kommer att tas bort från framtida PHP-utgåvor.

  • Det är dags att kliva in i 2000-talet.

Du kan också lägga till en UNIK begränsning till (en) rad(er).

Referenser:



  1. Hur kör man ett SSIS-paket från .NET?

  2. Guide till designdatabas för sociala nätverkssystem i MySQL

  3. PostgreSQL:använder en beräknad kolumn i samma fråga

  4. Möt Michal Bar and Me på Microsoft Ignite!