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

时间:2009-10-16 01:27:19

标签: wordpress auto-increment race-condition

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

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

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

感谢。

6 个答案:

答案 0 :(得分:162)

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

$lastid = $wpdb->insert_id;

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

上找到

答案 1 :(得分:13)

我就是这样做的,在我的代码中

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

More Class Variables

答案 2 :(得分:0)

这样的事也应该这样做:

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

答案 3 :(得分:0)

插入后,我需要获取最后的id方式,所以

$lastid = $wpdb->insert_id;

这不是一个选择。

执行以下操作:

global $wpdb;
$id = $wpdb->get_var( 'SELECT id FROM ' . $wpdb->prefix . 'table' . ' ORDER BY id DESC LIMIT 1');

答案 4 :(得分:0)

就像这样:

global $wpdb;
$table_name='lorem_ipsum';
$results = $wpdb->get_results("SELECT * FROM $table_name ORDER BY ID DESC LIMIT 1");
print_r($results[0]->id);

只需选择所有行,然后按 id 对它们进行 DESC 排序,并仅显示第一行

答案 5 :(得分:-4)

在事务中调用mysql_insert_id(),应该这样做:

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