2010-02-18 7 views
1

Je construis une application qui a besoin d'un identifiant unique aléatoire pour chaque utilisateur pas une séquencequelle est la meilleure façon de créer des ID mysql aléatoire en utilisant PHP

de base de données MySQL

ID Username 

pour mon aléatoire unique ID, quelle est la meilleure façon de le faire?

+0

Pourquoi est-ce que ce doit être un identifiant unique aléatoire et non l'auto-inc? auto-inc est plus sûr et assure un numéro unique. Toutefois, si vous divisez la base de données entre deux bases de données sur deux machines, vous pouvez donc avoir le même auto-incrément sur chacune. Rappelez-vous aussi 1 2 3 4 5 6 est essentiellement tout aussi aléatoire que 5 3 6 4 1 2 (sinon à l'œil humain) – PurplePilot

Répondre

2

PHP fournit une fonction uniqid, ce qui pourrait faire l'affaire, je suppose.

Notez qu'il est de retour une chaîne, cependant, et non un entier.


Une autre idée serait de générer/utiliser certains GUID - il y a des propositions à ce sujet dans les notes de l'utilisateur de la page de manuel uniqid.

+0

si j'utiliser quelque chose comme $ id_unique = uniques(); devrais-je vérifier si cet identifiant existe déjà dans la base de données? ou pas ? – trrrrrrm

+0

Il y a toujours un risque (très petit, mais existant) qu'un même identifiant "unique" soit généré deux fois ... Donc vous devez faire face à cette possibilité ;;; encore, comme il est hautement improbable, j'utiliserais un index UNIQUE dans la base de données, j'essaierais d'insérer, et je ne traiterais que le problème "insertion échouée en raison d'un doublon" - ie je ne verrais pas avant d'insérer * (mais ce n'est pas le le plus propre ^^) * –

1

je serais toujours la normale clé primaire auto-incrément pour identifier chaque ligne correctement, il est juste convention standard.

Je aurait alors une autre colonne indexée ont appelé « user_id » ou quelque chose et utiliser uniqid(); pour elle.

+0

si j'utilise quelque chose comme $ unique_id = unique(); devrais-je vérifier si cet identifiant existe déjà dans la base de données? ou pas ? – trrrrrrm

+0

Vous devriez si vous n'êtes pas sûr que '$ unique_id' est vraiment unique. –

1

MySQL fournit une fonction appelée UUID():

http://dev.mysql.com/doc/refman/5.1/en/miscellaneous-functions.html#function_uuid

Documentation affirme ceci:

Un UUID est conçu comme un nombre qui est globalement unique dans l'espace et le temps. Deux appels à UUID() sont attendus à générer deux valeurs différentes, même si ces appels sont effectuées sur deux ordinateurs distincts qui ne sont pas connectés les uns aux autres.

Cela devrait couvrir vos besoins.

+0

pour moi les mots «sont attendus» ne sont pas tout à fait la même chose que «volonté» ou «garanti». vous devez vous rappeler que le terme correct est "nombres pseudo-aléatoires" qui ne sont pas les mêmes que les nombres aléatoires, c'est-à-dire vraiment aléatoire, et potentiellement ne sera pas aléatoire, peut répéter après un certain nombre d'itérations, produira la même séquence même graine etc. (Lisez le chapitre de Donald Knuth sur ceci dans un de ses livres pour obtenir une vraie appréciation). Pour obtenir un nombre aléatoire qui était unique, vous devrez générer à partir d'une source unique.Cependant, comme il ne nous a pas dit le contexte de l'utilisation, c'est une supposition. – PurplePilot

Questions connexes