$wpdb->insert_id

2 nov 2016, 11:32:39
Vistas: 28.5K
Votos: 8

Estoy usando $wpdb->insert para insertar datos en la tabla de mi plugin. ¿Cómo puedo obtener el ID de la nueva fila que acabo de insertar? Como tengo muchos usuarios que agregan datos a la tabla, no puedo usar $wpdb->insert_id porque no necesariamente será el último registro insertado.

0
Todas las respuestas a la pregunta 2
3
16

No hay otra manera, pero no veo por qué necesitarías otra forma aparte de esta. Creo que el ID de inserción al que se accede mediante $wpdb es el último ID de esta instancia de WPDB, otros inserts no deberían afectar eso, pero no estoy seguro.

<?php

  $wpdb->insert("QUERY");

  $this_insert = $wpdb->insert_id;

?>
2 nov 2016 12:32:23
Comentarios

$wpdb es global, todas las consultas comparten la misma instancia.

fuxia fuxia
2 nov 2016 12:44:56

@toscho pero ¿una consulta de otro usuario influye en el ID de inserción que obtienes si insertan una consulta justo entre tu inserción y la lectura?

Niels van Renselaar Niels van Renselaar
3 nov 2016 15:55:45

No, no lo hace. $wpdb es global, pero solo en esta única solicitud, no se comparte entre solicitudes de múltiples usuarios. Como tampoco es asíncrono, esto funcionará como se espera.

janh janh
8 oct 2017 10:31:27
1

$wpdb->insert_id es global dentro de la sesión de la base de datos. Como WordPress crea una nueva sesión por cada sesión de usuario, esto no es un problema, incluso al usar un agrupamiento de conexiones.

La única advertencia es que esta variable siempre tendrá el último ID autoincremental insertado, por lo que debes verificarlo después de cada inserción.

Si realmente deseas capturar la lista de registros recién insertados, puedes hacerlo dentro de un procedimiento almacenado y capturarlo en una transacción, o dentro de un trigger.

28 sept 2020 00:10:36
Comentarios

Por supuesto, el paso importante es guardarlo justo debajo después del insert() antes de que otros inserts ocurran eventualmente por otro código o plugins, etc.

DrLightman DrLightman
9 may 2024 16:10:06