$wpdb->insert_id

2 nov 2016, 11:32:39
Visualizzazioni: 28.5K
Voti: 8

Sto utilizzando $wpdb->insert per inserire dati nella tabella del mio plugin. Come posso ottenere l'ID della nuova riga che ho appena inserito? Dato che ho molti utenti che aggiungono dati alla tabella, non posso utilizzare $wpdb->insert_id poiché non è necessariamente l'ultimo inserito.

0
Tutte le risposte alla domanda 2
3
16

Non c'è altro modo, ma non riesco a vedere perché avresti bisogno di un'alternativa diversa da questa. Credo che l'ID di inserimento a cui si accede tramite $wpdb sia l'ultimo ID di questa istanza di WPDB, altri inserimenti non dovrebbero influenzarlo, ma non ne sono sicuro.

<?php

  $wpdb->insert("QUERY");

  $this_insert = $wpdb->insert_id;

?>
2 nov 2016 12:32:23
Commenti

$wpdb è globale, tutte le query condividono la stessa istanza.

fuxia fuxia
2 nov 2016 12:44:56

@toscho ma una query di un altro utente influenza l'ID di inserimento che ottieni se inseriscono una query proprio tra il tuo inserimento e la lettura?

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

No, non lo fa. $wpdb è globale, ma solo in questa singola richiesta, non è condiviso tra le richieste di più utenti. Poiché inoltre non è asincrono, funzionerà come previsto.

janh janh
8 ott 2017 10:31:27
1

$wpdb->insert_id è globale all'interno della sessione del database. Poiché WordPress crea una nuova sessione per ogni sessione utente, questo non è un problema, anche quando si utilizza un connection pooling.

L'unica avvertenza è che questa variabile conterrà sempre l'ultimo ID auto-increment inserito, quindi devi verificarlo dopo ogni inserimento.

Se vuoi davvero catturare l'elenco dei nuovi record inseriti, puoi farlo all'interno di una stored procedure e catturarlo in una transazione, oppure all'interno di un trigger.

28 set 2020 00:10:36
Commenti

Naturalmente, il passaggio importante è salvarlo subito dopo l'insert() prima che altri inserimenti possano verificarsi da parte di altro codice o plugin ecc.

DrLightman DrLightman
9 mag 2024 16:10:06