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:
- 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
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:
- http://dev.mysql. com/doc/refman/5.7/en/constraint-primary-key.html
- http://dev.mysql.com/ doc/refman/5.7/en/alter-table.html
- Hur kontrollerar man om ett värde redan finns för att undvika dubbletter?
- Hur man lägger till unik nyckel till befintlig tabell (med rader som inte är unika)