O campo 'id' da minha tabela aumenta automaticamente quando insiro uma linha. Quero inserir uma linha e, em seguida, obter esse ID.
Eu faria isso da maneira que disse, mas existe uma maneira de fazer isso sem me preocupar com o tempo entre inserir a linha e obter o ID?
Eu sei que posso consultar o banco de dados em busca da linha que corresponde às informações inseridas, mas há uma alta alteração, haverá duplicatas, com a única diferença sendo o ID.
mysql_insert_id() will convert the return type of the native MySQL C API function mysql_insert_id() to a type of long (named int in PHP). If your AUTO_INCREMENT column has a column type of BIGINT (64 bits) the conversion may result in an incorrect value. Instead, use the internal MySQL SQL function LAST_INSERT_ID() in an SQL query. For more information about PHP's maximum integer values, please see the integer documentation.
\A função MySQL
LAST_INSERT_ID()
faz exatamente o que você precisa: recupera o ID que foi inserido durante esta sessão . Portanto, é seguro usá-lo, mesmo que haja outros processos (outras pessoas chamando exatamente o mesmo script, por exemplo) inserindo valores na mesma tabela.A função PHP
mysql_insert_id()
faz o mesmo que chamarSELECT LAST_INSERT_ID()
commysql_query()
.fonte
echo mysql_insert_id(); mysql_query('SELECT LAST_INSERT_ID(600)'); echo mysql_insert_id(); mysql_query('SELECT LAST_INSERT_ID()');
O segundomysql_insert_id()
não reflete 600, onde comomysql_query('SELECT LAST_INSERT_ID()')
será. Paramysql_insert_id()
que isso reflita a alteração, você deve primeiro fazer uma inserção ou uma atualização (que pode afetar 0 linhas). Veja último parágrafo do: http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-idQuanto ao site do PHP, o mysql_insert_id agora está obsoleto e devemos usar o DOP. Para fazer isso com o DOP, proceda da seguinte maneira:
fonte
Como o @NaturalBornCamper disse, o mysql_insert_id agora está obsoleto e não deve ser usado. As opções agora são usar PDO ou mysqli. NaturalBornCamper explicou o DOP em sua resposta, então mostrarei como fazê-lo com o MySQLi ( MySQL Improved ) usando mysqli_insert_id .
Consulte a documentação do PHP para obter mais exemplos: http://php.net/manual/en/mysqli.insert-id.php
fonte
Eu só quero adicionar um pequeno detalhe a respeito
lastInsertId()
;Ao inserir mais de uma linha por vez, ele não retorna o último ID , mas o primeiro ID da coleção das últimas inserções.
Considere o seguinte exemplo
O que acontece aqui é que eu empurro
my_table
duas novas linhas. O ID da tabela é incrementado automaticamente. Aqui, para o mesmo usuário, adiciono duas linhas com uma diferentevarNumb
.O valor ecoado no final será igual ao ID da linha em
varNumb=1
que, o que significa não o ID da última linha, mas o ID da primeira linha que foi adicionada na última solicitação.fonte
Um exemplo.
A linha de código
$course_id = $query_new->insert_id;
exibirá o ID da última linha inserida. Espero que isto ajude.fonte
Tente assim, você pode obter a resposta:
Veja os seguintes links:
http://www.w3schools.com/php/func_mysqli_insert_id.asp
http://php.net/manual/en/function.mysql-insert-id.php
Além disso, observe que esta extensão foi preterida no PHP 5.5 e removida no PHP 7.0
fonte
Encontrei uma resposta no link acima http://php.net/manual/en/function.mysql-insert-id.php
A resposta é:
fonte
mysql
resposta insegura , nunca a use.Tente isso ... funcionou para mim!
fonte
Outra resposta possível será:
Quando você define a tabela, com as colunas e os dados que ela terá. O ID da coluna pode ter a propriedade AUTO_INCREMENT .
Por esse método, você não precisa se preocupar com o ID , ele será feito automaticamente .
Por exemplo (extraído de w3schools )
Espero que isso seja útil para alguém.
Editar: Esta é apenas a parte em que você define como gerar um ID automático, para obtê-lo após a criação, as respostas anteriores antes estão corretas.
fonte