¿Cómo obtener el último ID de fila insertado de la base de datos de Wordpress?


Mi plugin de wordpress tiene una tabla con un campo de clave primaria AUTO_INCREMENT llamado ID. Cuando se inserta una nueva fila en la tabla, me gustaría obtener el valor ID de la inserción.

La característica es usar AJAX para publicar datos en el servidor para insertarlos en la base de datos. El nuevo ID de fila se devuelve en la respuesta AJAX para actualizar el estado del cliente. Es posible que varios clientes estén publicando datos en el servidor al mismo tiempo. Por lo tanto, tengo que asegurarme de que cada solicitud de AJAX obtenga la nueva fila EXACTA ID en respuesta.

En PHP, hay un método llamado mysql_insert_id para esta característica.Pero, es válido para la condición de raza solo si el argumento es link_identifier de la última operación. Mi operación con la base de datos está en w wpdb. Cómo extraer el link_identifier desde $wpdb para asegurarse de mysql_insert_id trabajo? ¿Hay alguna otra forma de obtener el id de la última fila insertada desde $wpdb?

Gracias.

Author: random, 2009-10-16

4 answers

Justo después del $wpdb->insert() que hace la inserción, haga esto:

$lastid = $wpdb->insert_id;

Se puede encontrar más información sobre cómo hacer las cosas de la manera de wordpress en el códice de wordpress. Los detalles anteriores se encontraron aquí en la página de la clase wpdb

 143
Author: jsnfwlr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-29 09:38:25

Así es como lo hice, en mi código

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

Más Variables de Clase

 10
Author: Francisco Corrales Morales,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-11 17:53:43

Algo como esto debería hacerlo también :

$last = $wpdb->get_row("SHOW TABLE STATUS LIKE 'table_name'");
$lastid = $last->Auto_increment;
 0
Author: Martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-29 09:38:49

Poniendo la llamada a mysql_insert_id() dentro de una transacción, debería hacerlo:

mysql_query('BEGIN');
// Whatever code that does the insert here.
$id = mysql_insert_id();
mysql_query('COMMIT');
// Stuff with $id.
 -3
Author: Ollie Saunders,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-16 01:32:23