Meu plugin do WordPress tem uma tabela com um campo de chave primária AUTO_INCREMENT chamado ID. Quando uma nova linha é inserida na tabela, gostaria de obter o valor de 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, tenho que garantir que cada solicitação AJAX obtenha a nova ID de linha EXATA em resposta.
No PHP, existe um método chamado mysql_insert_id para este recurso. Mas, ele é válido para condição de corrida apenas se o argumento for link_identifier da última operação. Minha operação com o 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 de $ wpdb?
Obrigado.
fonte
$wpdb->dbh
, mas está definido comoprotected $dbh;
... mas você não pode acessá-lo diretamente, portanto, use a resposta abaixo :)Respostas:
Logo após o
$wpdb->insert()
que faz a inserção, faça o seguinte:Mais informações sobre como fazer as coisas do jeito WordPress podem ser encontradas no códice do WordPress. Os detalhes acima foram encontrados aqui na página da classe wpdb
fonte
$lastid = $wpdb->$insert_id
:?É assim que eu fiz, no meu código
Mais variáveis de classe
fonte
$wpdb->query
retorna o tamanho das linhas afetadas e$wpdb->insert_id
possui o último id inserido. Obrigado!INSERT IGNORE
com$wpdb->insert
infelizmente.insert_id
para mim, não o número de linhas afetadas.Algo assim também deve servir:
fonte
Eu precisava obter a última forma de id após inseri-lo, então
Não era uma opção.
Fiz o seguinte:
fonte
Colocar a chamada para
mysql_insert_id()
dentro de uma transação deve fazer isso:fonte