De volgende zijn beproefde, geteste en bewezen methoden om te controleren of een rij bestaat.
(Sommige daarvan gebruik ik zelf, of heb ik in het verleden gebruikt).
Bewerken: Ik heb een eerdere fout gemaakt in mijn syntaxis waarbij ik mysqli_query()
. gebruikte tweemaal. Raadpleeg de revisie(s).
D.w.z.:
if (!mysqli_query($con,$query))
die gewoon had moeten lezen als if (!$query)
.
- Mijn excuses dat ik die fout over het hoofd heb gezien.
Kanttekening: Beide '".$var."'
en '$var'
hetzelfde doen. U kunt een van beide gebruiken, beide zijn geldige syntaxis.
Dit zijn de twee bewerkte zoekopdrachten:
$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
}
en in jouw geval:
$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
}
Je kunt ook mysqli_
gebruiken met een voorbereide verklaring
methode:
$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;
}
}
}
Of een BOB-methode met een voorbereide verklaring :
<?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.";
}
}
?>
- Voorbereide instructies kunnen het beste worden gebruikt om te helpen beschermen tegen een SQL-injectie.
NB:
Als je te maken hebt met formulieren en POST-arrays zoals hierboven gebruikt/beschreven, zorg er dan voor dat de POST-arrays waarden bevatten, dat een POST-methode wordt gebruikt voor het formulier en overeenkomende benoemde attributen voor de invoer.
- Ter info:Formulieren gebruiken standaard een GET-methode als ze niet expliciet worden geïnstrueerd.
Opmerking:<input type = "text" name = "var">
- $_POST['var']
wedstrijd. $_POST['Var']
geen match.
- POST-arrays zijn hoofdlettergevoelig.
Raadpleeg:
Fout bij het controleren van referenties:
- 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
Houd er rekening mee dat MySQL-API's niet met elkaar vermengd zijn, voor het geval u deze Q&A bezoekt en mysql_
gebruikt om verbinding mee te maken (en te bevragen).
- Je moet dezelfde gebruiken van verbinding tot zoeken.
Raadpleeg hierover het volgende:
Als u de mysql_
. gebruikt API en geen keuze hebt om ermee te werken, raadpleeg dan de volgende Q&A op Stack:
De mysql_*
functies zijn verouderd en worden verwijderd uit toekomstige PHP-releases.
- Het is tijd om de 21e eeuw binnen te stappen.
U kunt ook een UNIEKE beperking toevoegen aan (een) rij(en).
Referenties:
- 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
- Hoe controleer je of een waarde al bestaat om duplicaten te voorkomen?
- Hoe een unieke sleutel toevoegen aan een bestaande tabel (met niet-unieke rijen)