2013-03-08 14 views
4

檢索自動遞增值。這適用於單個插入。它的

$result = $mysqli->query($query); 
$NewPrimaryKey = $mysqli->insert_id; 

一個簡單的例子。然而,我已經學會(從這個網站居然)有多個刀片更好的擴展插入完成:

insert into table (name1,name2,name3) values 
('blah1','blah2',blah3'), 
('blah1','blah2',blah3'), 
('blah1','blah2',blah3')) 

這也偉大工程 - 除非我想知道哪些密鑰是自動分配的。

PHP手冊說:

當運行在桌子上擴展的插入用AUTO_INCREMENT字段, mysqli_insert_id()的值將等於插入第一 行的值。

我的測試似乎證實了這一點。

注:我不想只是第一或剛剛過去的。

我不希望有恢復到幾千單刀片只是讓我可以以個人爲基礎的auto_allocated關鍵。

有誰知道的方式做擴展插件和找回所有被分配(大概在陣列)的鑰匙?

它沒有想到我剛讀和做擴展寫之前保留現有最新的鍵,然後計算分配密鑰的預期值,但是這似乎有點bodgified。

+0

你有沒有考慮一個ORM? – 2013-03-08 15:14:42

+1

你確定你需要做批量插入嗎?如果這是一個場景,需要在應用程序中注滿所有ID,則使用批量插入的性能優勢可能可以忽略不計(因爲我假設您需要這些來爲每個要插入的項目發出後續查詢相關數據)? – 2013-03-08 15:18:18

+0

我沒有聽說過ORM。我有一個快速的看,但它似乎是一個新的學習技能。我真的不想爲這個單一問題做這件事,但謝謝。 – 2013-03-08 15:22:02

回答

0

我不認爲你可以得到所有新插入的行標識,但如果insert_id返回第一 ID,你可以假設插入的ID是ID對刀片的數量範圍(除非出現錯誤,否則應該是這種情況,但是整個插入應該失敗,因爲它是原子的)。您還可以選擇所有大於或等於新的insert_id的auto_increment ID。

+0

我的確想到了這一點,但它似乎有點...手冊,如果你知道我的意思。我希望會有某種基於MySQL的解決方案,但如果沒有,我可能不得不這樣做。謝謝。 – 2013-03-08 15:28:20

-1

你可以計算出鑰匙,不是嗎?

$keys=array(); 
for($id=mysqli_insert_id();$id<=$id+$totalRecords;$id++) 
    $keys[]=$id; 

或者使用象學說的ORM

+0

和減號是因爲? – 2013-03-08 15:20:32

+0

那不是我,至少我不這麼認爲。 – 2013-03-08 15:33:42

相關問題