PHPのMySQLクエリが明らかに間違った結果を与える
-
22-07-2019 - |
質問
PHPとPHPMyAdminを使用して小さなプロファイルサイトを作成しています。 メンバーにID番号を付与しています。これに基づいて、現在データベースにある最大の番号+1
PHPスクリプトを取得する前に25回テストを行いました。
次に、PHPMyAdminを使用してこれらの25のエントリを削除しました。
しかし、今、私のPHPコードがこれを行うとき:
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];
}
間違った番号が表示されます。
テストシナリオ:データベーステーブルには、IDが1、2、3の3つのエントリが含まれています
デバッグセッションを開始し、リターン $ record [0]
にブレークポイントを設定します。
その内容を確認すると、最大数である3ではなく28です。
25 + 3 = 28のように、すでに削除した25個のエントリ...
これを引き起こしている原因とその修正方法を知っている人はいますか?
解決
おそらくauto_incrementが設定されていて、クエリが最高のIDを返しているためです。他のレコードを削除したとき、おそらく自動増分カウントをリセットしていません。
他のヒント
MySQLで auto_increment
を使用している場合、レコードを削除しても次の値は減少しません。
TRUNCATE TABLE mytable
でテーブルを空にできます-これにより値がリセットされます。
また、自動インクリメントが次に割り当てる値と考える値を変更することもできます。
ALTER TABLE members AUTO_INCREMENT = 3;
自動インクリメント列に現在の最大値より小さい値を入力すると、値がそのMAX + 1に変更されることに注意してください。現在の次の値が何に設定されているかを確認するには、次を実行します。
SHOW CREATE TABLE members;
テーブル定義の最後に、「 AUTO_INCREMENT = 26
"」と表示されます。または現在の値が何であれ。