Eu tenho uma consulta de inserção (estilo de registro ativo) usada para inserir os campos do formulário em uma tabela MySQL. Desejo obter o último ID auto-incrementado para a operação de inserção como o valor de retorno da minha consulta, mas tenho alguns problemas com ela.
Dentro do controlador:
function add_post(){
$post_data = array(
'id' => '',
'user_id' => '11330',
'content' => $this->input->post('poster_textarea'),
'date_time' => date("Y-m-d H:i:s"),
'status' => '1'
);
return $this->blog_model->add_post($post_data);
}
E modelo interno:
function add_post($post_data){
$this->db->trans_start();
$this->db->insert('posts',$post_data);
$this->db->trans_complete();
return $this->db->insert_id();
}
Não recebo nada como o retorno do add_post no modelo
mysql
codeigniter
Afghan Dev
fonte
fonte
db->insert_id()
retornafalse
após adb->trans_complete()
. Certifique-se de obter o seuinsert_id()
antes de concluir a transação.Respostas:
Tente isto
No caso de várias inserções, você pode usar
fonte
Uma transação não é necessária aqui, isso deve ser suficiente:
fonte
fonte
A partir da documentação :
Portanto, você pode usar algo como isto:
fonte
porque você iniciou a transação pela inserção de dados, a primeira verificação da transação foi concluída ou não. depois de iniciar a transação, ela deve ser confirmada ou revertida de acordo com o status da transação;
acima, confirmamos os dados da transação bem-sucedida, até você obtém o carimbo de data e hora
fonte
Apenas para concluir este tópico: Se você configurar sua tabela com chave primária e incremento automático, poderá omitir o processo de incrementar manualmente o ID.
Confira este exemplo
Agora você pode inserir linhas
fonte
fonte
Usando o driver PHP do mysqli, você não pode obter o insert_id após o commit.
A solução real é esta:
Origem da estrutura do código: https://codeigniter.com/user_guide/database/transactions.html#running-transactions-manually
fonte
Você deve usar
$lastId = $this->db->insert_id();
fonte