Domanda

Sto usando PHP e PHPMyAdmin per creare un sito con profilo ridotto. Sto dando ai membri un numero ID, in base al numero più grande attualmente nel database, +1

Ho fatto 25 test prima di ottenere lo script PHP dove volevo che fosse.

Ho quindi eliminato quelle 25 voci usando PHPMyAdmin.

Ma ora, quando il mio codice PHP lo fa:

function getLatestID() {
    $query = "SELECT max(member_id) FROM members";
    $result = @mysql_query($query) or showError("unable to query database for user information");
    if (!($record = mysql_fetch_array($result))) return null;
    return $record[0];
}

Ottengo il numero sbagliato.

Scenario di test: la tabella del database contiene 3 voci, con ID 1, 2 e 3.

Inizio una sessione di debug e inserisco un punto di interruzione sul ritorno $ record [0] . Controllo il suo contenuto e invece di 3, che è il numero più grande, è 28.

Come in 25 + 3 = 28, le 25 voci che ho già eliminato ...

Qualcuno sa cosa sta causando questo e come posso risolverlo?

È stato utile?

Soluzione

Probabilmente è perché hai impostato auto_increment e la query restituisce l'id più alto. Quando hai eliminato gli altri record, probabilmente non hai ripristinato il conteggio dell'incremento automatico.

Altri suggerimenti

Se si utilizza auto_increment in MySQL, l'eliminazione dei record non ridurrà il valore successivo.

Puoi svuotare una tabella con TRUNCATE TABLE mytable - questo ripristinerà il valore.

Puoi anche modificare il valore che l'incremento automatico ritiene sia il valore successivo da allocare:

ALTER TABLE members AUTO_INCREMENT = 3;

Nota che se inserisci un valore inferiore al valore massimo corrente nella colonna di autoincremento, cambierà il valore in quel MAX + 1. Per vedere a cosa è impostato l'attuale valore successivo, procedere come segue:

SHOW CREATE TABLE members;

Alla fine della definizione della tabella, mostrerà " AUTO_INCREMENT = 26 " o qualunque sia il suo valore attuale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top