MySQL navraag in PHP gee voor die hand liggend verkeerd gevolg
-
22-07-2019 - |
Vra
Ek gebruik PHP en PHPMyAdmin om 'n klein profiel werf te skep. Ek gee lede 'n ID-nommer, wat gebaseer is op wat is die grootste aantal tans in die databasis, 1
Ek het 25 toetse voor ek die PHP script waar ek wou dit te wees.
Ek dan verwyder die 25 inskrywings met behulp van PHPMyAdmin.
Maar nou, wanneer my PHP-kode doen dit:
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];
}
Ek kry die verkeerde nommer.
Toets scenario:. Die databasistabel hou 3 inskrywings, met ID's 1, 2 en 3
Ek begin 'n debugging sessie en sit 'n breekpunt op die terugkeer $record[0]
.
Ek is so die inhoud daarvan en in plaas van 3, wat is die grootste aantal, dit is 28.
As in 25 + 3 = 28, die 25 inskrywings wat ek nou al geskrap ...
Het enige iemand weet wat veroorsaak dit en hoe ek dit kan regmaak?
Oplossing
Dit is waarskynlik omdat jy auto_increment stel en die navraag is die terugkeer van die hoogste id. Wanneer jy die ander rekords verwyder, jy het waarskynlik nie weer die motor inkrement telling.
Ander wenke
As jy 'auto_increment
in MySQL dan te skrap rekords sal die volgende waarde verminder nie.
Jy kan 'n tafel leeg met TRUNCATE TABLE mytable
-. Dit sal die waarde herstel
Jy kan ook waarde wat motor-inkrement dink is die volgende waarde toe te ken verander:
ALTER TABLE members AUTO_INCREMENT = 3;
Let daarop dat as jy in 'n waarde wat minder is as die huidige maksimum waarde in die motor-inkrement kolom, sal dit die waarde aan dat MAX + 1 te verander. Om te sien wat die huidige volgende waarde is ingestel op, doen die volgende:
SHOW CREATE TABLE members;
Aan die einde van die tafel definisie, sal dit "AUTO_INCREMENT = 26
" of wat ook al wys dit is die huidige waarde is.