2013-09-10 33 views
0

我懷疑這個答案非常簡單,但無論出於何種原因,我對它有點困惑。在插入之前查詢主要數值時跳過主鍵號碼

我正在嘗試生成一個唯一的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("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 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,當我沒有在插入查詢中指定它的值時。

幫助將不勝感激。

+0

它看起來像你的auto_increment偏移設置爲2,它是一個MySQL配置變量。沒有更多的信息,很難說它是否是其他的東西。 –

+0

默認設置爲1。當我在插入前禁用代碼時,它會將主數據增加1. –

+0

然後,它必定是一個查詢失敗,另一個成功。你如何用反引用你的專欄名稱? HASH是MySQL中的保留字。給我一個鏡頭,我們可以看到它是否繼續增加2或不。 –

回答

0

我們發現主鍵跳過是由於設置不正確的半同步服務器造成的。我們已將這交給我們的服務器管理員。