Mein WordPress-Plugin hat eine Tabelle mit einem AUTO_INCREMENT- Primärschlüsselfeld namens ID. Wenn eine neue Zeile in die Tabelle eingefügt wird, möchte ich den ID-Wert der Einfügung erhalten.
Die Funktion besteht darin, AJAX zu verwenden, um Daten zum Einfügen in die Datenbank an den Server zu senden. 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 an den Server senden. Daher muss ich sicherstellen, dass jede AJAX-Anforderung als Antwort die GENAUE neue Zeilen-ID erhält.
In PHP gibt es für diese Funktion eine Methode namens mysql_insert_id . Sie ist jedoch nur dann für die Race-Bedingung gültig, wenn das Argument link_identifier der letzten Operation lautet . Meine Operation mit Datenbank ist auf $ wpdb. Wie extrahiere ich den link_identifier aus $ wpdb, um sicherzustellen, dass mysql_insert_id funktioniert? Gibt es eine andere Möglichkeit, die zuletzt eingefügte Zeilen-ID von $ wpdb abzurufen?
Vielen Dank.
quelle
$wpdb->dbh
, aber sie ist definiert alsprotected $dbh;
... Sie können nicht direkt darauf zugreifen, verwenden Sie daher die Antwort unten :)Antworten:
Führen
$wpdb->insert()
Sie dies direkt nach dem Einfügen aus:Weitere Informationen dazu, wie man Dinge auf WordPress-Art macht, finden Sie im WordPress-Codex. Die obigen Details wurden hier auf der wpdb-Klassenseite gefunden
quelle
$lastid = $wpdb->$insert_id
?So habe ich es in meinem Code gemacht
Weitere Klassenvariablen
quelle
$wpdb->query
gibt die Länge der betroffenen Zeilen zurück und$wpdb->insert_id
hat die zuletzt eingefügte ID. Vielen Dank!INSERT IGNORE
mit$wpdb->insert
leider.insert_id
an mich zurückgeben, nicht die Anzahl der betroffenen Zeilen.So etwas sollte es auch tun:
quelle
Ich musste den letzten Ausweis nach dem Einfügen erhalten, also
War keine Option.
Hat folgendes gemacht:
quelle
Wenn Sie den Anruf
mysql_insert_id()
innerhalb einer Transaktion tätigen, sollten Sie Folgendes tun:quelle