I'm using $wpdb->insert to insert data to my plugin table. How can I get the id of the new line I Just insert. Because I have a lot of users that add data to the table I can't use $wpdb->insert_id Because it's not necessary the last one.
There is no other way, but I can not see how you need any other way then this. I believe that the insert ID accessed by $wpdb is the last ID by this instance of WPDB, other inserts should not affect that but I'm not sure.
<?php $wpdb->insert("QUERY"); $this_insert = $wpdb->insert_id; ?>
$wpdbis global, all queries share the same instance.– fuxia ♦Nov 2, 2016 at 10:44
1@toscho but does a query by another user influences the insert ID you get back if they insert a query just in between your insert and read out? Nov 3, 2016 at 13:55
2No it doesn't.
$wpdbis global, but only in this one request, it's not shared between requests of multiple users. As it's also not asynchronous, this will work as expected.– janhOct 8, 2017 at 7:31
$wpdb->insert_id is global withint the database session. since Wordpress creates a new session per user session this is not a problem, even when using a connection pooling. the only caveat is that this variable will always have the last inserted auto-increment ID, so you have to check after each insert. If you really want to capture the list of new inserted records, you can do it inside a stored procedure and capture it in a transaction. or inside a trigger.