Wie bekomme ich zuletzt eingeleitete Zeilen -ID aus der WordPress -Datenbank?
-
21-09-2019 - |
Frage
Mein WordPress -Plugin hat einen Tisch mit a Auto_increment Primärschlüsselfeld namens ID. Wenn eine neue Zeile in die Tabelle eingefügt wird, möchte ich den ID -Wert der Insertion erhalten.
Die Funktion besteht darin, AJAX zum Posten von Daten zum Server zum Einfügen in DB zu verwenden. Die neue Zeilen -ID wird in der AJAX -Antwort zurückgegeben, um den Client -Status zu aktualisieren. Es ist möglich, dass mehrere Clients gleichzeitig Daten auf Server veröffentlichen. Ich muss also sicherstellen, dass jede AJAX -Anforderung die genaue neue Zeilen -ID als Antwort erhalten.
In PHP gibt es eine Methode genannt mysql_insert_id Für diese Funktion. Aber es gilt nur dann für die Rennbedingung, wenn das Argument lautet link_identifier der letzten Operation. Mein Betrieb mit Datenbank ist auf $ wpdb. Wie man das extrahiert link_identifier Von $ wpdb, um sicherzustellen, dass mySQL_Insert_id funktioniert? Gibt es eine andere Möglichkeit, die zuletzt eingehende Reihen-ID von $ wpdb zu erhalten?
Vielen Dank.
Lösung
Direkt nach dem $wpdb->insert()
Das macht das Einfügen: Tun Sie Folgendes:
$lastid = $wpdb->insert_id;
Weitere Informationen darüber, wie die Dinge der WordPress -Weg erledigt werden können, finden Sie im WordPress -Codex. Die oben genannten Details wurden hier auf der gefunden WPDB -Klassenseite
Andere Tipps
So habe ich es in meinem Code gemacht
...
global $wpdb;
$query = "INSERT INTO... VALUES(...)" ;
$wpdb->query(
$wpdb->prepare($query)
);
return $wpdb->insert_id;
...
So etwas sollte es auch tun:
$last = $wpdb->get_row("SHOW TABLE STATUS LIKE 'table_name'");
$lastid = $last->Auto_increment;
Den Anruf stellen mysql_insert_id()
In einer Transaktion sollte es tun:
mysql_query('BEGIN');
// Whatever code that does the insert here.
$id = mysql_insert_id();
mysql_query('COMMIT');
// Stuff with $id.