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:
- 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
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:
- http://dev.mysql. com/doc/refman/5.7/en/constraint-primary-key.html
- http://dev.mysql.com/ doc/refman/5.7/da/alter-table.html
- Hvordan kontrollerer man, om der allerede findes en værdi for at undgå dubletter?
- Sådan tilføjes en unik nøgle til eksisterende tabel (med ikke-entydige rækker)