2009-10-16 149 views
62

我的wordpress插件有一個AUTO_INCREMENT稱爲ID的主鍵字段。當一個新行插入到表中時,我想要獲取插入的ID值。如何從wordpress數據庫獲取最後插入的行ID?

該功能是使用AJAX將數據發佈到服務器以插入到數據庫中。新的行ID在AJAX響應中返回以更新客戶端狀態。多個客戶端可能同時向服務器發佈數據。所以,我必須確保每個AJAX請求都能得到確切的新行ID作爲響應。

在PHP中,有一個叫mysql_insert_id此feature.But方法,它是有效的競爭條件僅當參數是link_identifier上次操作。我對數據庫的操作在$ wpdb上。如何從$ wpdb中提取link_identifier以確保mysql_insert_id正常工作?有沒有其他方法可以從$ wpdb獲取最後插入的行ID?

謝謝。

+0

的鏈接|資源存儲在'$ wpdb-> dbh'中,但它被定義爲'protected $ dbh;'... sou不能直接訪問它,因此,請使用下面的答案:) – 2016-06-04 12:38:09

回答

128

,做到這一點:關於如何做的事情

$lastid = $wpdb->insert_id; 

更多信息WordPress的方式可以在wordpress codex中找到。細節以上在這裏被發現的wpdb class page

+0

是這樣的:'$ lastid = $ wpdb - > $ insert_id'? – 2014-02-11 17:23:19

+0

「如果行不能被插入,則此函數返回false,否則返回受影響的行數(它總是爲1)。」來自:http://codex.wordpress.org/Function_Reference/wpdb_Class#INSERT_rows – unbreak 2015-03-25 12:59:12

+1

@unbreak - 那裏有錯誤的功能......你正在閱讀關於wpdb-> insert($ table,$ data,$ format); – jsnfwlr 2015-04-29 03:34:52

-2

把呼叫mysql_insert_id()一個事務中,應該這樣做:這確實插入了$wpdb->insert()後直

mysql_query('BEGIN'); 
// Whatever code that does the insert here. 
$id = mysql_insert_id(); 
mysql_query('COMMIT'); 
// Stuff with $id. 
+4

這就是n不要使用OP中提到的$ wpdb對象。 – jsnfwlr 2009-10-16 02:01:14

0

像這樣的事情也應該這樣做:

$last = $wpdb->get_row("SHOW TABLE STATUS LIKE 'table_name'"); 
$lastid = $last->Auto_increment; 
+7

如果在兩個不同的進程幾乎完全相同的時間插入兩條記錄,會不會造成問題?兩個進程可以同時插入(或足夠接近同一時間),這樣auto_increment將爲這兩個進程返回相同的數字。「 – 2013-09-08 05:54:18

7

這是我做到了,在我的代碼

... 
global $wpdb; 
$query = "INSERT INTO... VALUES(...)" ; 
$wpdb->query(
     $wpdb->prepare($query) 
); 
return $wpdb->insert_id; 
... 

More Class Variables

+1

」如果不能插入該行,則此函數返回false,否則返回受影響的行數(始終爲1)。「來自:http://codex.wordpress.org/Function_Reference/wpdb_Class#INSERT_rows – unbreak 2015-03-25 13:01:48

+1

它的工作原理。 '$ wpdb-> query'返回受影響行的len,'$ wpdb-> insert_id'返回最後一個插入的id。謝謝! – 2015-09-29 20:26:51

+0

這對我來說更好,因爲我想要捕獲插入,否則會因唯一列上的重複列值而返回錯誤。不幸的是,''wpdb-> insert'無法'INSERT IGNORE'。 – 2018-02-15 01:50:13

相關問題