La query MySQL in PHP fornisce un evidente risultato errato
-
22-07-2019 - |
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?
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.