MySQL-Abfrage in PHP gibt offensichtlich falsches Ergebnis
-
22-07-2019 - |
Frage
Ich bin mit PHP und phpMyAdmin ein kleines Profil Website zu erstellen. Ich gebe eine ID-Nummer Mitglieder, basierend auf dem die größte Zahl derzeit in der Datenbank, +1
habe ich 25 Tests, bevor ich den PHP-Skript, wo ich es haben wollte.
ich dann gelöscht, diese 25 Einträge mit phpMyAdmin.
Aber jetzt, wenn mein PHP-Code tut dies:
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];
}
Ich erhalte die falsche Nummer.
Testszenario. Die Datenbanktabelle enthält 3 Einträge, mit IDs 1, 2 und 3
Ich beginne eine Debug-Sitzung und einen Haltepunkt setzen auf die Rückkehr $record[0]
.
Ich überprüfe seinen Inhalt und anstelle von 3, die die größte Zahl ist, es ist 28.
Wie in 25 + 3 = 28, die 25 Einträge, die ich allready gelöscht ...
Weiß jemand, was dies verursacht und wie kann ich es beheben?
Lösung
Es ist wahrscheinlich, weil Sie festgelegt haben auto_increment und die Abfrage mit der höchsten ID zurückkehrt. Wenn Sie die anderen Datensätze gelöscht, werden Sie wahrscheinlich nicht die automatische Schrittzahl zurückgesetzt hat.
Andere Tipps
Wenn Sie auto_increment
in MySQL dann Löschen von Datensätzen verwenden sind nicht um den nächsten Wert verringern.
Sie können eine Tabelle mit TRUNCATE TABLE mytable
leeren -. Dies den Wert zurückgesetzt
Sie können auch Wert ändern, die Autoinkrement denkt, dass der nächste Wert zuweisen:
ALTER TABLE members AUTO_INCREMENT = 3;
Beachten Sie, wenn Sie in einem Wert gesetzt, der kleiner ist als der aktuelle Maximalwert in der Autoinkrement-Spalte ist, wird es den Wert dieser MAX ändern + 1. Um zu sehen, was der aktuelle nächste Wert auf, dies zu tun:
SHOW CREATE TABLE members;
Am Ende der Tabellendefinition, wird es zeigen „AUTO_INCREMENT = 26
“ oder was auch immer es ist aktuelle Wert.