Comment générer un numéro de série ou de commande unique en php sans vérifier la présence de db?Génération d'un numéro de série ou d'un numéro unique
Répondre
voir uniqid ou uuid_create
dans uuid pecl ou com_create_guid()
Si vous voulez garantir l'unicité, vous devez vérifier quelque chose. Vous pouvez utiliser un fichier plat et stocker uniquement le dernier numéro utilisé (que vous pouvez ensuite incrémenter), mais il serait stupide de ne pas utiliser une base de données. Vous devez stocker un tas d'autres informations liées au numéro (coordonnées, ce que la commande consiste, etc) et une base de données est idéale pour cela.
Si vous utilisez une base de données MySQL, vous pouvez générer un numéro de série sans pré-vérifier la base de données à l'aide d'une colonne auto_increment. L'insertion d'une nouvelle ligne entraînera l'attribution d'un nouvel ID unique à cette colonne sans avoir à lire/écrire cette colonne dans votre PHP. Alternativement, si vous voulez un ID global unique sans même une base de données, alors vous pouvez utiliser la fonction uniqid() de PHP. Notez que cela renvoie une chaîne. Si vous utilisez plusieurs machines physiques ou que vous vous déplacez d'un serveur à l'autre, vous devez ajouter un préfixe (premier argument) différent sur chaque machine. Lorsqu'elle est utilisée sur la même machine, cette fonction ne doit jamais renvoyer deux fois la même valeur de chaîne.
peut mysql_return le dernier identifiant unique sans requerying la base de données? – Smith
@Smith: http://php.net/manual/fr/function.mysql-insert-id.php (Mais je ne sais pas si elle est réactualisée ou non.) – Svish
Je doute que mysql_insert_id crée une nouvelle requête DB, étant donné la description (par exemple, le fait qu'il soit retenu moins longtemps que LAST_INSERT_ID() de MySQL). Mais c'est une bonne question. – thomasrutter
Il y a plusieurs problèmes en utilisant des colonnes autoincrement dans mysql (pas moins le fait qu'il n'échelle à des nœuds équivalents). Alors que vous pouvez maintenir un générateur de séquence à peu près n'importe où (memcache, fichiers, base de données) PHP n'implémente pas la sémantique de verrouillage de fichier sophistiquée - en plus d'affecter les performances, vous pouvez rapidement obtenir des contrats. Il ne s'adapte pas aux grands volumes.
Si vous avez PL/SQL disponible, alors je vous recommande d'implémenter un générateur de séquence là-bas - alternativement vous pourriez envisager d'implémenter un générateur en PHP et sqlite.
Je recommande fortement que vous mettre en œuvre votre générateur pour créer un nombre de formats:
$ use_number = ++ $ sequence_number. str_pad ($ node_id, '0', $ max_nodes, STR_PAD_LEFT);
Où node_id est un nombre référençant de manière unique le substrat de stockage où le numéro de séquence actuel est stocké. Et $ max_nodes est un peu plus que le nombre maximum de chiffres trouvés dans $ node_id (par exemple, 3 permet d'avoir jusqu'à 999 nœuds).
Sinon, traitez-la comme une chaîne avec ponctuation entre les 2 parties (et/ou stockez les 2 parties dans différentes colonnes de base de données).
C.
- 1. Drupal Numéro de série
- 2. Hdd Numéro de série
- 3. Comment trouver le numéro de série unique d'un périphérique flash?
- 4. Vérificateur de numéro de série
- 5. Recherche du numéro de série d'un CD
- 6. Comment créer un numéro de commande unique
- 7. Trouver un numéro de téléphone ou un numéro unique à travers J2ME
- 8. Numéro de série Colonne dans ListView
- 9. Renommer le PC au numéro de série
- 10. navigation page php par numéro de série
- 11. Obtention du numéro de série du BIOS
- 12. Quel serait le code pour l'authentification du numéro de série?
- 13. Comment obtenir le numéro de série du disque dur
- 14. Récupération du numéro de série d'un clavier USB sous Windows
- 15. iphone Numéro aléatoire numéro
- 16. Appel Pinvoke pour obtenir le numéro de série de Windows?
- 17. Comment obtenir le numéro de série de la machine
- 18. Comment créer un générateur de numéro de série?
- 19. Expression Studio ne demande pas de numéro de série
- 20. Recherche du numéro de série du lecteur USB sans WMI
- 21. Expression régulière pour déterminer le numéro de série
- 22. Générer automatiquement un numéro de série dans gridview
- 23. Lecture du numéro de série du périphérique USB en C#
- 24. Obtenir le numéro de série USB avec VB.net?
- 25. Regex pour un numéro de série dans T-SQL
- 26. Comment obtenir le numéro de série des disques durs?
- 27. Numéro de série pour Telerik Grille dans MVC
- 28. DataType pour stocker un numéro de série long (10 octets)
- 29. Affectation d'un numéro de série à un client à partir d'un groupe de numéros de série
- 30. Javascript .js chargement numéro
si je produis de chaîne comme cette date (YmbHis) serait-il unique si le site est fortement utilisé – Smith
^Surtout si votre serveur observe l'heure d'été. Je pense qu'il est préférable de simplement vérifier la base de données (ou l'avoir générer le numéro de commande pour vous comme suggéré par Thomas). Ce n'est pas lourd sur la base de données, et même si c'était le cas, vous ne générez probablement pas plus de quelques dizaines de numéros de commande par minute. –