Pergunta

Meu plugin WordPress tem uma tabela com um INCREMENTO AUTOMÁTICO campo de chave primária denominado ID.Quando uma nova linha é inserida na tabela, gostaria de obter o valor do ID da inserção.

O recurso é usar AJAX para postar dados no servidor para inserir no banco de dados.O novo ID de linha é retornado na resposta AJAX para atualizar o status do cliente.É possível que vários clientes estejam postando dados no servidor ao mesmo tempo.Portanto, preciso ter certeza de que cada solicitação AJAX obtenha o ID EXATO da nova linha em resposta.

Em PHP, existe um método chamado mysql_insert_id para esse recurso. Mas, é válido para condição de corrida somente se o argumento for link_identifier da última operação.Minha operação com banco de dados está em $wpdb.Como extrair o link_identifier de $wpdb para garantir que mysql_insert_id funcione?Existe alguma outra maneira de obter o ID da última linha inserida em $ wpdb?

Obrigado.

Foi útil?

Solução

Logo depois do $wpdb->insert() Isso faz a inserção, faça isso:

$lastid = $wpdb->insert_id;

Mais informações sobre como fazer as coisas que a maneira WordPress pode ser encontrada no código do WordPress. Os detalhes acima foram encontrados aqui no Página da classe WPDB

Outras dicas

Foi assim que fiz, no meu código

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

Mais variáveis ​​de classe

Algo assim também deve fazer isso:

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

Colocando a chamada para mysql_insert_id() Dentro de uma transação, deve fazê -lo:

mysql_query('BEGIN');
// Whatever code that does the insert here.
$id = mysql_insert_id();
mysql_query('COMMIT');
// Stuff with $id.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top