如何从WordPress数据库中获取最后插入的行ID?

问题描述 投票:81回答:4

我的WordPress插件有一个表,其中包含一个名为ID的AUTO_INCREMENT主键字段。当一个新行插入表中时,我想获得插入的ID值。

该功能是使用AJAX将数据发布到服务器以插入到数据库中。在AJAX响应中返回新的行ID以更新客户端状态。多个客户端可能同时向服务器发布数据。因此,我必须确保每个AJAX请求获得EXACT新行ID作为响应。

在PHP中,有一个名为mysql_insert_id的方法用于此功能。但是,仅当参数是最后一个操作的link_identifier时,它才适用于竞争条件。我对数据库的操作是在$ wpdb上。如何从$ wpdb中提取link_identifier以确保mysql_insert_id有效?有没有其他方法可以从$ wpdb获取最后插入的行ID?

谢谢。

wordpress auto-increment race-condition
4个回答
164
投票

在执行插入的$wpdb->insert()之后直接执行此操作:

$lastid = $wpdb->insert_id;

有关如何使用WordPress方式的更多信息可以在WordPress codex中找到。以上详细信息可在wpdb class page上找到


14
投票

我的代码就是这样做的

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

More Class Variables


0
投票

像这样的东西也应该这样做:

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

-4
投票

mysql_insert_id()的调用置于事务中,应该这样做:

mysql_query('BEGIN');
// Whatever code that does the insert here.
$id = mysql_insert_id();
mysql_query('COMMIT');
// Stuff with $id.
© www.soinside.com 2019 - 2024. All rights reserved.