Domanda

Il mio plugin per WordPress ha un tavolo con un AUTO_INCREMENT chiave primaria chiamata ID. Quando una nuova riga viene inserita nella tabella, vorrei ottenere il valore ID dell'inserimento.

La funzione è quella di utilizzare AJAX per inviare i dati al server da inserire nel database. Il nuovo ID riga viene restituita nella risposta AJAX per aggiornare lo stato del client. E 'possibile che più client postando i dati al server allo stesso tempo. Quindi, devo fare in modo che ogni richiesta AJAX ottenere il ESATTO nuovo ID riga in risposta.

In PHP, c'è un metodo chiamato mysql_insert_id per questo feature.But, è valido per la condizione di competizione solo se l'argomento è identificativo_connessione di ultima operazione. La mia operazione con il database è in $ wpdb. Come estrarre il identificativo_connessione da $ wpdb per assicurarsi che il lavoro mysql_insert_id? C'è un altro modo per ottenere l'ultimo inserito fila id da $ wpdb?

Grazie.

È stato utile?

Soluzione

Subito dopo la $wpdb->insert() che fa l'inserto, fare questo:

$lastid = $wpdb->insert_id;

Maggiori informazioni su come fare le cose nel modo in cui WordPress può essere trovato nel codice di WordPress. I dettagli di cui sopra sono stati trovati qui a pagina classe wpdb il

Altri suggerimenti

Questo è come ho fatto, nel mio codice

 ...
 global $wpdb;
 $query =  "INSERT INTO... VALUES(...)" ;
 $wpdb->query(
        $wpdb->prepare($query)
);
return $wpdb->insert_id;
...

Più Classe variabili

Qualcosa del genere dovrebbe farlo anche:

$last = $wpdb->get_row("SHOW TABLE STATUS LIKE 'table_name'");
$lastid = $last->Auto_increment;

Mettere la chiamata a mysql_insert_id() all'interno di una transazione, dovrebbe farlo:

mysql_query('BEGIN');
// Whatever code that does the insert here.
$id = mysql_insert_id();
mysql_query('COMMIT');
// Stuff with $id.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top