在插入前查询主值时跳过主键号

时间:2013-09-10 21:36:09

标签: php mysql pdo

我怀疑这个问题的答案非常简单,但无论出于何种原因,我都有点困惑。

我正在尝试生成一个唯一的20个字母数字哈希值。我已经尝试了多种方法通过PHP生成随机值,但我仍然得到重复。我暂时尝试了一个进程,在该进程中我在插入之前查询表,拉出最新的主键值,将其增加1,然后将其用作生成的哈希值的一部分。不幸的是,下面的代码导致主键的以下插入增加2而不是1(即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。

非常感谢帮助。

1 个答案:

答案 0 :(得分:0)

我们发现主键跳过是由于未正确设置的半同步服务器。我们已将其交给我们的服务器管理员。