Quando se trabalha com PHP e MySQL, é muito comum a necessidade de recuperar o valor de uma chave primaria, que geralmente é denominada de ID e quase sempre é auto incremento. Se um valor é auto incremento, desta forma não é possível descobrir no momento o valor que foi gerado pelo banco de dados. Quando se trabalha com uma aplicação "single", onde somente existe um único Client ou geralmente o Client e o Server são o mesmo, é possível(e muito utilizado), buscar o último registro da tabela que foi realizado a inserção do registro. O famoso "ORDER BY DESC ID" em conjunto com um "LIMIT 0,1" por exemplo, iria resolver este problema.

    Mas quando falamos de aplicações WEB, o número de Client podem ser ilimitados e com isso a lógica abordado acima é muito arriscada de ser aplicada, principalmente em um Portal, onde pode haver "N" comandos INSERT no banco.

    Para resolver este problema, é possível utilizar a função mysql_insert_id. Esta função retorna um ID gerado pela conexão.Com isso é importante, sempre recuperar apos o execução da query no banco. O mesmo recebe como parâmetro o link que indentifica a conexão com o banco de dados. Vale ressaltar a nota oficial do PHP.NET.

    link_identifier

    A conexão MySQL. se o identificador de conexão não for especificado, a ultima conexão aberta por mysql_connect() é assumida. Se uma conexão assim não for encontrada, ela irá tentar criar uma como se a função mysql_connect() fosse chamada sem argumentos. Se uma conexão não for encontrada ou estabelecida, um aviso de nível de erro E_WARNING é gerado.

    Corpo da função:

    

int mysql_insert_id ([ resource $link_identifier ] )

    Exemplo:

    


<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
    die('Erro na conexão: ' . mysql_error());
}
mysql_select_db('mydb');

mysql_query("INSERT INTO mytable (product) values ('kossu')");
printf(ID inserido = %d\n", mysql_insert_id());
?>

    É importante salientar, o que o próprio manual PHP, cita:

    Nota 1:

    Devido a mysql_insert_id() agir sobre a última consulta realizada, tenha certeza de chamar mysql_insert_id() imediatamente após a consulta que gerou o valor.

    Nota 2:

    O valor da função SQL do MySQL LAST_INSERT_ID() sempre contém o valor AUTO_INCREMENT mais recentemente gerado, e não é reiniciado entre as consultas.

    O MySQL gerencia os auto incremento, salvando em uma tabela onde na mesma é citada a tabela e a próxima posição do registro. Desta forma você também poderia gerenciar/controlar esta arquitetura de outra forma.