Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/05/2011, 10h43   #1
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 708
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 708
Points : 328
Points : 328
Par défaut SQLSTATE[23000]: Integrity constraint violation

Bonjour,
J'ai défini un champ de ma table users "email" à UNIQUE KEY `email` (`email`). Une fois qu'une adresse email est enregistrée, lors d'un nouvel enregistrement et que la meme adresse revient, j'ai cette erreur :
Citation:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'okoweb@yahoo.fr' for key 'email'
Comment peut-on gérer cette erreur en PHP?

Merci d'avance...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/05/2011, 10h51   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
regarder si l’émail existe
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 11h26   #3
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 708
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 708
Points : 328
Points : 328
Citation:
Envoyé par stealth35 Voir le message
regarder si l’émail existe
Oui merci, je pensais qu'il était possible de récupérer et de gérer correctement ce retour que de faire un test d'email dans la bdd avant l'insertion. Cela fait un double appel de Mysql. Or en gérant juste ce retour, on aurait juste une seule sollicitation de la bdd.

Merci d'avance...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/05/2011, 11h31   #4
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
Sinon tu peux également gérer le retour d'erreur et agir en fonction.

Code :
1
2
3
4
5
6
7
8
9
if($sql->execute())
{
    //Insertion OK
}
else
{
    $error = $sql->errorInfo();
    //Vérifier code erreur
}
Une duplicate entry ayant le code de retour 1062 tu devrais pouvoir le gérer assez simplement.

voir : http://php.net/manual/fr/pdo.error-handling.php
http://www.php.net/manual/fr/pdo.errorinfo.php
grunk est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/05/2011, 11h31   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par okoweb Voir le message
Oui merci, je pensais qu'il était possible de récupérer et de gérer correctement ce retour que de faire un test d'email dans la bdd avant l'insertion. Cela fait un double appel de Mysql. Or en gérant juste ce retour, on aurait juste une seule sollicitation de la bdd.

Merci d'avance...
tu peux très bien faire ça, mais je vois pas ou est ton soucis ducoup
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 18h28   #6
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 708
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 708
Points : 328
Points : 328
J'ai vu un truc de ce genre quelque part :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
// Gestion des doublons
} else {
 
	// Changement de nom de variable (plus lisible)
	$erreur =& $id_utilisateur;
 
	// On vérifie que l'erreur concerne bien un doublon
	if (23000 == $erreur[0]) { // Le code d'erreur 23000 siginife "doublon" dans le standard ANSI SQL
 
		preg_match("`Duplicate entry '(.+)' for key \d+`is", $erreur[2], $valeur_probleme);
		$valeur_probleme = $valeur_probleme[1];
 
		if ($nom_utilisateur == $valeur_probleme) {
 
			$erreurs_inscription[] = "Ce nom d'utilisateur est déjà utilisé.";
 
		} else if ($adresse_email == $valeur_probleme) {
 
			$erreurs_inscription[] = "Cette adresse e-mail est déjà utilisée.";
 
		} else {
 
			$erreurs_inscription[] = "Erreur ajout SQL : doublon non identifié présent dans la base de données.";
		}
 
	} else {
 
		$erreurs_inscription[] = sprintf("Erreur ajout SQL : cas non traité (SQLSTATE = %d).", $erreur[0]);
	}
 
	// On reaffiche le formulaire d'inscription
	include CHEMIN_VUE.'formulaire_inscription.php';
}
Quand dites vous?
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/05/2011, 09h57   #7
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 708
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 708
Points : 328
Points : 328
Voici le code de ma fonction, y'a t-il une erreur?
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
function insertUser($pasword, $firstname, $lastname, $email, $tel, $type, $administration, $service, $autorisation, $level_struc, $user_parent) {
	global $db;
	$sql = 'INSERT INTO users
	              (pasword, firstname, lastname, email, tel, type, administration, 	service, autorisation, level_struc, user_parent, date_inscription) 
								 VALUES (:pasword, :firstname, :lastname, :email, :tel, :type, :administration, 	:service, :autorisation, :level_struc, :user_parent, NOW())';	
	$statement = $db->prepare($sql);	
  if($statement->execute(array(':pasword'=>$pasword, ':firstname'=>$firstname, ':lastname'=>$lastname, ':email'=>$email, ':tel'=>$tel, ':type'=>$type, ':administration'=>$administration, ':service'=>$service, ':autorisation'=>$autorisation, ':level_struc'=>$level_struc, ':user_parent'=>$user_parent))){
  		return $db->lastInsertId();
  }
	else return $db->errorInfo();	  
}
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h30.


 
 
 
 
Partenaires

Hébergement Web