Voici des méthodes éprouvées, testées et éprouvées pour vérifier si une ligne existe.
(Certains que j'utilise moi-même ou que j'ai utilisés dans le passé).
Modifier : J'ai fait une erreur précédente dans ma syntaxe où j'ai utilisé mysqli_query()
à deux reprises. Veuillez consulter la ou les révisions.
C'est-à-dire :
if (!mysqli_query($con,$query))
qui aurait dû se lire simplement comme if (!$query)
.
- Je m'excuse d'avoir oublié cette erreur.
Remarque : Les deux '".$var."'
et '$var'
faire la même chose. Vous pouvez utiliser l'un ou l'autre, les deux sont une syntaxe valide.
Voici les deux requêtes modifiées :
$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
}
et dans votre cas :
$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
}
Vous pouvez également utiliser mysqli_
avec une déclaration préparée
méthode :
$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;
}
}
}
Ou une méthode PDO avec une déclaration préparée :
<?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.";
}
}
?>
- Il est préférable d'utiliser des instructions préparées pour aider à se protéger contre une injection SQL.
N.B. :
Lorsque vous traitez des formulaires et des tableaux POST tels qu'utilisés / décrits ci-dessus, assurez-vous que les tableaux POST contiennent des valeurs, qu'une méthode POST est utilisée pour le formulaire et que les attributs nommés correspondent aux entrées.
- Pour votre information :les formulaires utilisent par défaut une méthode GET si ce n'est pas explicitement indiqué.
Remarque :<input type = "text" name = "var">
- $_POST['var']
correspondre. $_POST['Var']
pas de correspondance.
- Les tableaux POST sont sensibles à la casse.
Consulter :
Erreur lors de la vérification des références :
- http://php.net/manual/en/function. rapport d'erreurs.php
- http://php.net/manual/en/mysqli.error. php
- http://php.net/manual/en/pdo. gestion des erreurs.php
Veuillez noter que les API MySQL ne se mélangent pas, au cas où vous visiteriez ce Q&R et que vous utiliseriez mysql_
pour se connecter (et interroger avec).
- Vous devez utiliser le même depuis la connexion jusqu'à l'interrogation.
Consultez à ce sujet :
Si vous utilisez le mysql_
API et que vous n'avez pas le choix de l'utiliser, consultez les questions-réponses suivantes sur Stack :
Le mysql_*
sont obsolètes et seront supprimées des futures versions de PHP.
- Il est temps d'entrer dans le 21e siècle.
Vous pouvez également ajouter une contrainte UNIQUE à (une) ligne(s).
Références :
- 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
- Comment vérifier si une valeur existe déjà pour éviter les doublons ?
- Comment ajouter une clé unique à une table existante (avec des lignes non uniques)