sql >> Database teknologi >  >> RDS >> Mysql

Hvordan kontrollerer man, om der findes en række i MySQL? (dvs. tjek om der findes en e-mail i MySQL)

Følgende er afprøvede, testede og gennemprøvede metoder til at kontrollere, om der findes en række.

(Nogle af dem bruger jeg selv, eller har brugt tidligere).

Rediger: Jeg lavede en tidligere fejl i min syntaks, hvor jeg brugte mysqli_query() to gange. Se venligst revision(erne).

Dvs.:

if (!mysqli_query($con,$query)) som blot skulle have læst som if (!$query) .

  • Jeg undskylder, at jeg har overset den fejl.

Sidebemærkning: Begge '".$var."' og '$var' gøre det samme. Du kan bruge begge dele, begge er gyldig syntaks.

Her er de to redigerede forespørgsler:

$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

}

og i dit tilfælde:

$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 også bruge mysqli_ med en udarbejdet redegørelse metode:

$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-metode med en udarbejdet redegørelse :

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


    }
?>
  • Forberedte sætninger er bedst at bruge til at beskytte mod en SQL-injektion.

NB:

Når du beskæftiger dig med formularer og POST-arrays som brugt/skisseret ovenfor, skal du sørge for, at POST-arrays indeholder værdier, at en POST-metode bruges til formularen og matchende navngivne attributter for inputs.

  • Til information:Formularer er som standard en GET-metode, hvis det ikke er udtrykkeligt instrueret.

Bemærk:<input type = "text" name = "var"> - $_POST['var'] match. $_POST['Var'] intet match.

  • POST-arrays skelner mellem store og små bogstaver.

Se:

Fejl ved kontrol af referencer:

Bemærk venligst, at MySQL API'er ikke blandes sammen, hvis du måske besøger denne Q&A, og du bruger mysql_ at forbinde med (og forespørge med).

  • Du skal bruge den samme fra tilslutning til forespørgsel.

Rådfør dig med følgende om dette:

Hvis du bruger mysql_ API og ikke har noget valg om at arbejde med det, så konsulter følgende Q&A på Stack:

mysql_* funktioner er forældede og vil blive fjernet fra fremtidige PHP-udgivelser.

  • Det er tid til at træde ind i det 21. århundrede.

Du kan også tilføje en UNIK begrænsning til (en) række(r).

Referencer:



  1. Sådan e-mailes resultaterne af en forespørgsel i SQL Server (T-SQL)

  2. 7 måder at finde dublerede rækker, mens du ignorerer den primære nøgle i MySQL

  3. Oracle 12.2.0.1 kommer i 2016

  4. Hvordan fjerner man nye linjetegn fra datarækker i mysql?