これに対する答えは非常に単純だと思いますが、何らかの理由で、少し困惑しています。
一意の 20 文字の英数字ハッシュ値を生成しようとしています。PHP 経由でランダムな値を生成する方法を複数試しましたが、まだ重複しています。挿入の前にテーブルをクエリし、最新の主キー値を取得し、それを 1 つ増やして、それを生成されたハッシュ値の一部として使用するプロセスを一時的に試みていました。残念ながら、以下のコードでは、1 ではなく 2 (つまり、13、15、17、19 など) ずつ増加する主キーの次の挿入が行われます。
これが私のコードです:
$dbTableNumQuery = $dbh->prepare("SELECT ROW_ID FROM table ORDER BY ROW_ID DESC LIMIT 1");
$dbTableNumQuery->execute();
$dbTableNumRow = $dbTableNumQuery->fetch();
$lastID = $dbTableNumRow['ROW_ID'];
$lastID = intval($lastID);
$lastID = $lastID + 1;
$hash = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 20);
$hash = $lastID . $hash;
$hash = substr($hash, 0, 20);
$query = $dbh->prepare("INSERT INTO secondarytable (HASH) VALUES (:hash)");
$query->bindParam(':hash', $hash, PDO::PARAM_STR);
$status = $query->execute();
私を最も混乱させているのは、挿入クエリで主キーの値を指定していないのに、なぜ主キーの値が 2 増加するのか理解できないことです。
そして、助けていただければ幸いです。