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

我的 WordPress 插件有一个名为 ID 的 自动增量主键字段表。当一个新行插入到表中时,我希望得到插入的 ID 值。

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

In PHP, there is a method called < em > mysql _ insert _ id for this feature.But, it is valid for race condition only if the argument is 链接标识符 of last operation. My operation with database is on $wpdb. How to extract the 链接标识符 from $wpdb to make sure mysql_insert_id work? Is there any other way to get the last-inserted-row id from $wpdb?

谢谢。

166864 次浏览

将对 mysql_insert_id()的调用放入一个事务中,应该可以做到:

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

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

$lastid = $wpdb->insert_id;

关于如何使用 WordPress 方法的更多信息可以在 WordPress Codex 中找到。上面的细节可以在 wpdb class page上找到

Something like this should do it too :

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

This is how I did it, in my code

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

更多类变量

I needed to get the last id way after inserting it, so

$lastid = $wpdb->insert_id;

没得选。

做了以下事情:

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

就像这样:

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 排序,并且只显示第一行

在 WP 中获取最后插入的行 ID,如下所示。

global $wpdb;
$order = ['product_name'=>'Computer', 'os_system'=>'Linux'];
$wpdb->insert('wp_product_orders', $order );
$last_inserted_id = $wpdb->insert_id;