[PHP&SQL] Générer ID différent des précédents

Fermé
gugusco - 1 nov. 2011 à 23:12
jojo673 Messages postés 210 Date d'inscription lundi 19 septembre 2011 Statut Membre Dernière intervention 9 avril 2014 - 2 nov. 2011 à 11:22
Bonjour,

J'ai créee une base de données (SQL) qui gère des d'annonces qui ont un chacun un ID unique. Actuellement je passe par l'option AUTO INCREMENT et PRIMARY et cela génère des ID 1 puis 2,3,4,5

Moi ce que je voudrais c'est avoir un nombre aléatoire à 8 chiffres par exemple.
J'ai vu que l'on peut utiliser la fonction php "uniqid(rand(8), true)".

Mais il se pourrait alors que ce nombre soit par malchance déjà présent dans la base de donnée associé à une annonce ?

Comment y remédier

Merci d'avance

A voir également:

2 réponses

jojo673 Messages postés 210 Date d'inscription lundi 19 septembre 2011 Statut Membre Dernière intervention 9 avril 2014 44
1 nov. 2011 à 23:52
Bonjour,
Oui il est possible que ce nombre aléatoire soit déjà présent dans la base de données !
Pour éviter ça, une méthode pas très compliqué est de générer un nombre aléatoire en php, exécuter une requête SELECT sur la base de données en sélectionnant les lignes qui ont cette ID (si il y en a) avec la condition WHERE. Si une ligne est retourné, l'ID existe déjà (on génère alors un autre nombre aléatoire et on recommence), sinon si aucunes lignes n'est retourné, en peut enregistrer !
0
Ah évidemment je n'y avais pas pensé, merci. c'est plus long que ce que je ne pensais mais ce n'est effectivement pas compliqué.

Je vous mets le code que j'ai trouvé si ca peut en aider d'autres
(J'ai fait une boucle afin que tant qu'il n'y ait pas de nombre unique, il continue d'en chercher un (= tant que $ID_unique =false)

//par défaut on n'a pas encore de ID unique crée
		$ID_unique = false;
		while($ID_unique == true)
		{
			// on génère un nombre à huits chiffres au hasard via php
			$nbre = rand(8);
			//on regarde si il existe via une requete
			$req0 = $bdd->prepare('SELECT ad_ID FROM adsmain WHERE ad_ID = :ad_ID');
			$req0->execute(array('ad_ID'=> $nbre));
			$ID = $req0->fetch();
			$ID = $ID['ad_ID'];
			
			//si oui on arrete la boucle en mettant TRUE
			
			if(isset($ID)) // la requete nous dit qu'une ID identique existe déjà
			{
				$ID_unique = false;
			}
			else // sinon on peut arrêter la boucle en satisfaisant la condition en mettant TRUE
			{
				$ID_unique = true;
			}	
		}
		// quand la boucle se sera arreté on aura trouver un nbre unique, on l'inscrit dans la variable.
		$ad_ID = $nbre;
0
jojo673 Messages postés 210 Date d'inscription lundi 19 septembre 2011 Statut Membre Dernière intervention 9 avril 2014 44
2 nov. 2011 à 11:22
Parfait :)
0