Como retornar o valor do último código inserido no MySQL?

Eu insiro um registro no Mysql numa chave primária ‘auto_increment’, o que transfere ao bd o trabalho de criar o código apropriado. Mas já pesquisei e não encontrei uma consulta que me retorne o código gerado pela última inclusão no bd. Alguém sabe como fazer isso?

Descobri que o Mysql tem uma função chamada ‘last_insert_id()’ que retorna o último código gerado, mas não descobri como usa-la. Nos meus testes ela só retorna 0!

se tem a função é melhor tentar usa-la, mas na gambiarra você pode tentar

select max(campo) from tabela ele vai te retornar o maior valor dessa coluna, já que é um autoincrement deverá ser o último

Valeu! Obrigado. Acho que vai resolver.

Cara, quando vc loga no Banco, cria uma seção… então vc insere uma coluna e, antes de fechar a seção, chama ‘last_insert_id()’… se vc fechar a seção e depois abrir de novo e chamar ‘last_insert_id()’, ele retornará 0… se vc estiver programando e mandar o codigo SQL através de uma string, vc pode mandar tudo junto separado por ‘ponto e virgula’, tipo:

INSERT INTO tabela (telefone) VALUES (“33339999”); SELECT last_insert_id();

Só gostaria de comentar sobre o select MAX no campo ID, cuidado enfrentamos uma situação bem chata esses dias onde um analista inseriu um registro manual com o ID 5000, se na logica voce inserir e for pegar esse valor utilizando max você vai acabar atribuindo o ID errado no seu objeto, no nosso caso era uma procedure que utilizava o MAX e acabou dando uns problemas.

“select max” é tão ruim q nem merece comentários. rsrsrs.

imagine o cenário:
vc insere um registro > id=83;
outro user tb insere um registro > id=84;
seu “select max” irá retornar 84.
e aí?
rsrsrsrs

[quote]“select max” é tão ruim q nem merece comentários. rsrsrs.

imagine o cenário:
vc insere um registro > id=83;
outro user tb insere um registro > id=84;
seu “select max” irá retornar 84.
e aí?
rsrsrsrs[/quote]

tivemos diversos problemas com isso se liga:

uma procedure inseria um registro em uma tabela depois fazia um select max pegava o ID e inseria em diversas outras,
resultado amarrou todos os registros filhos no ID 5000.

sem contar os casos anteriores que misteriosamente um registro pai apresentava filhos de outros, eu não sou DBA nem PLSQL developer mas não faria isso mesmo porque ele ja armazenava o valor da SEQUENCE em um ponteiro e depois do primeiro insert alterava com o valor do MAX, vai entender, e ainda culparam o estagiario.

Pessoal no meu caso preciso pegar esse ID pra ele ser um campo de outra tabela que vou preencher via AJAX. estou com duas dificuldades. como consigo dar um echo nesse last_insert_id via ajax sem refresh para que meu usuário veja esse campo na tela assim que inserido:?

Outra duvida, posso colocar esse resultado numa variável pra poder usar na hora de gravar os dados nessa outra tabela do banco?