$wpdb->insert_id în WordPress

2 nov. 2016, 11:32:39
Vizualizări: 28.5K
Voturi: 8

Folosesc $wpdb->insert pentru a insera date în tabelul plugin-ului meu. Cum pot obține ID-ul noii linii pe care tocmai am inserat-o? Deoarece am mulți utilizatori care adaugă date în tabel, nu pot folosi $wpdb->insert_id Pentru că nu este neapărat ultimul introdus.

0
Toate răspunsurile la întrebare 2
3
16

Nu există altă cale, dar nu văd de ce ai avea nevoie de altceva în afară de asta. Cred că ID-ul inserat accesat prin $wpdb este ultimul ID pentru această instanță a WPDB, alte inserări nu ar trebui să afecteze acest lucru, dar nu sunt sigur.

<?php

  $wpdb->insert("QUERY");

  $this_insert = $wpdb->insert_id;

?>
2 nov. 2016 12:32:23
Comentarii

$wpdb este global, toate interogările folosesc aceeași instanță.

fuxia fuxia
2 nov. 2016 12:44:56

@toscho dar o interogare făcută de alt utilizator influențează ID-ul de insert pe care îl primești înapoi dacă ei inserează o interogare exact între insert-ul tău și citirea rezultatului?

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

Nu, nu influențează. $wpdb este global, dar doar în cadrul aceluiași request, nu este partajat între request-uri ale mai multor utilizatori. De asemenea, nefiind asincron, va funcționa conform așteptărilor.

janh janh
8 oct. 2017 10:31:27
1

$wpdb->insert_id este global în cadrul sesiunii de bază de date. Deoarece WordPress creează o nouă sesiune pentru fiecare sesiune de utilizator, acest lucru nu reprezintă o problemă, chiar și atunci când se utilizează un pool de conexiuni.

Singura limitare este că această variabilă va conține întotdeauna ultimul ID auto-incrementat inserat, așa că trebuie să verifici după fiecare operație de inserare.

Dacă dorești să capturezi lista de înregistrări nou inserate, poți face acest lucru în cadrul unei proceduri stocate și să le capturezi într-o tranzacție. Sau poți face acest lucru în interiorul unui trigger.

28 sept. 2020 00:10:36
Comentarii

Desigur, pasul important este să-l salvezi chiar mai jos după insert(), înainte ca alte inserări să se întâmple eventual prin alte coduri sau plugin-uri etc.

DrLightman DrLightman
9 mai 2024 16:10:06