115

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

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

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

谢谢。

4

7 回答 7

229

在插入之后$wpdb->insert(),执行以下操作:

$lastid = $wpdb->insert_id;

有关如何以 WordPress 方式做事的更多信息,请参阅 WordPress 法典。上面的详细信息可以在wpdb 类页面上找到

于 2009-10-16T02:04:00.353 回答
15

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

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

更多类变量

于 2014-02-11T17:53:43.000 回答
2

我需要在插入后获取最后一个 id 方式,所以

$lastid = $wpdb->insert_id;

不是一个选择。

进行了以下操作:

global $wpdb;
$id = $wpdb->get_var( 'SELECT id FROM ' . $wpdb->prefix . 'table' . ' ORDER BY id DESC LIMIT 1');
于 2020-03-05T14:40:40.633 回答
0

这样的事情也应该这样做:

$last = $wpdb->get_row("SHOW TABLE STATUS LIKE 'table_name'");
$lastid = $last->Auto_increment;
于 2011-10-11T12:06:56.270 回答
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 排序,并仅显示第一行

于 2021-01-23T16:01:56.490 回答
0

像这样在 WP 中获取最后插入的行 ID。

global $wpdb;
$order = ['product_name'=>'Computer', 'os_system'=>'Linux'];
$wpdb->insert('wp_product_orders', $order );
$last_inserted_id = $wpdb->insert_id;
于 2021-10-19T11:45:30.967 回答
-7

将调用mysql_insert_id()放入事务中,应该这样做:

mysql_query('BEGIN');
// Whatever code that does the insert here.
$id = mysql_insert_id();
mysql_query('COMMIT');
// Stuff with $id.
于 2009-10-16T01:32:23.160 回答