Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Gestione chiavi primarie di un DB

    Salve a tutti!
    Esiste una funzione PHP di libreria in grado di generare una chiave primaria ( numerica o alfanumerica ) di un DB dato l'elenco delle chiavi esistenti? Oppure qualcosa di simile, per semplificare la gestione del DB.

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Ci sarebbe uniqid(), ma di suo non fa controlli sul DB, quindi non ti garantisce che l'id generato sia realmente unico.

    Potresti farti una funzione tua che faccia così:
    - genera un codice con uniqid()
    - verifica con una select se questo codice esiste già nella tabella
    - se non esiste usa questo codice
    - se esiste genera un nuovo codice e verifica se esiste

    Chiaramente questa cosa va in un ciclo while che continua finché non viene generato un codice che non esiste nella tabella.

  3. #3
    Si avevo pensato di lavorare in questo modo. Non conoscevo la funzione uniqid(), grazie mille.
    Cercavo un modo alternativo per non rischiare di fare molte interrogazioni. Magari creo un array con le chiavi e faccio il controllo su quell'array.
    Grazie.

  4. #4
    oppure gestisci l'errore: fai la insert senza controlli preventivi, se non hai errori di chiave duplicata sei ok; se ti viene restituito l'errore generi un'altra chiave e riprovi. In base alla complessità del pattern potrebbe costare di meno usare questa strategia

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Non è che ti capiteranno così tanti casi di chiavi già esistenti, uniqid() di base ti ritorna un codice di 13 caratteri, se metti a true il parametro $more_entropy te ne ritorna uno da 23 (miliardi e miliardi di combinazioni).
    Secondo me non ti conviene generare l'array, rischi di sprecare più memoria per tenere l'array in una variabile che le risorse spese per fare 2 o 3 query.

    L'unica cosa a cui devi stare attento con uniqid() è che ti genera un codice in cui ci sono lettere, numeri ed un punto, quindi il campo del codice deve essere un varchar, non usare un campo numerico.

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.