Mi complemento 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 de ID de la inserción.
La característica es usar AJAX para publicar datos en el servidor para insertarlos en la base de datos. La nueva 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 AJAX obtenga la nueva ID de fila EXACTA en respuesta.
En PHP, existe un método llamado mysql_insert_id para esta característica, pero es válido para condición de carrera solo si el argumento es link_identifier de la última operación. Mi operación con la base de datos está en $ wpdb. ¿Cómo extraer el identificador de enlace de $ wpdb para asegurarse de que mysql_insert_id funcione? ¿Hay alguna otra forma de obtener la identificación de la última fila insertada de $ wpdb?
Gracias.
fuente
$wpdb->dbh
, pero se define comoprotected $dbh;
... pero no puede acceder a él directamente, por lo tanto, use la respuesta a continuación :)Respuestas:
Inmediatamente después de
$wpdb->insert()
que hace la inserción, haga esto:Puede encontrar más información sobre cómo hacer las cosas a la manera de WordPress en el códice de WordPress. Los detalles anteriores se encontraron aquí en la página de la clase wpdb
fuente
$lastid = $wpdb->$insert_id
:?Así es como lo hice, en mi código
Más variables de clase
fuente
$wpdb->query
declaraciones de la len de filas afectadas y$wpdb->insert_id
tiene el último ID insertado. ¡Gracias!INSERT IGNORE
la$wpdb->insert
desgracia.insert_id
, no el número de filas afectadas.Algo como esto también debería hacerlo:
fuente
Necesitaba obtener la última forma de identificación después de insertarla, así que
No era una opción.
Hizo lo siguiente:
fuente
Poniendo la llamada
mysql_insert_id()
dentro de una transacción, debería hacerlo:fuente