Question

J'utilise PHP et PHPMyAdmin pour créer un petit site de profil. Je donne aux membres un numéro d'identification, basé sur le plus grand numéro actuellement dans la base de données, +1

J'ai fait 25 tests avant d'avoir le script PHP où je voulais qu'il soit.

J'ai ensuite supprimé ces 25 entrées à l'aide de PHPMyAdmin.

Mais maintenant, quand mon code PHP le fait:

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];
}

Je me trompe de numéro.

Scénario de test: la table de base de données contient 3 entrées, avec les identificateurs 1, 2 et 3.

Je démarre une session de débogage et place un point d'arrêt sur le retour $ record [0] . Je vérifie son contenu et au lieu de 3, qui est le plus grand nombre, il est 28.

Comme dans 25 + 3 = 28, les 25 entrées que j'ai déjà supprimées ...

Quelqu'un sait-il ce qui est à l'origine de ce problème et comment y remédier?

Était-ce utile?

La solution

C'est probablement parce que auto_increment est défini et que la requête renvoie l'identifiant le plus élevé. Lorsque vous avez supprimé les autres enregistrements, vous n'avez probablement pas réinitialisé le nombre d'incréments automatiques.

Autres conseils

Si vous utilisez auto_increment dans MySQL, la suppression d'enregistrements ne réduira pas la valeur suivante.

Vous pouvez vider une table avec TRUNCATE TABLE mytable - cela réinitialisera la valeur.

Vous pouvez également modifier la valeur que l'incrémentation automatique considère comme la prochaine valeur à allouer:

ALTER TABLE members AUTO_INCREMENT = 3;

Notez que si vous insérez une valeur inférieure à la valeur maximale actuelle dans la colonne d'auto-incrémentation, la valeur sera modifiée en MAX + 1. Pour voir comment est définie la prochaine valeur actuelle, procédez comme suit:

SHOW CREATE TABLE members;

À la fin de la définition de la table, le message " AUTO_INCREMENT = 26 " ou quelle que soit sa valeur actuelle est.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top