Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

-rafael-

[Resolvido] pegar o ultimo registro inserido

Recommended Posts

ola a todos!

 

como faço para pegar o ultimo registro que um determinado usuario inseriu?

 

ex:

 

ele acaba de cadastrar um dado, e na mesma pagina eu pegar esse dado para outros fins (o id).

 

admitindo que o banco tem varias inserções ao mesmo tempo.

 

obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem N opções, mas tudo depende de como sua base está estruturada.

 

Se o INSERT é feito em uma tabela que possui dados bem diferenciados, você pode fazer um SELECT utilizando como parâmetros os dados inseridos pelo usuário (não é 100% garantido em casos onde exista a possibilidade de serem feitos 2 cadastros iguais);

 

Nessa situação, podes inserir um campo na tabela que diferencie essas inserções:

- MD5 (gerado com dados do insert + data);

- Time Stamp (pode gerar erro se inseridos 2 dados exatamente ao mesmo tempo - meio raro, mas nada impossível);

- IP (observar se dentro de uma intranet o IP obtido não é referente ao IP externo, nesse caso todos os micros teriam o mesmo IP =/);

- ID do Usuário;

 

Após a inserção, basta fazer o select do ID da linha utilizando como parâmetro estes valores.

 

Alguns exemplos:

 

SELECT id FROM table WHERE ip = '192.168.1.99' ORDER BY ip DESC LIMIT 1

SELECT id FROM table WHERE id_usuario = 'FULANO' ORDER BY id DESC LIMIT 1

SELECT id FROM table WHERE data_cadastro = '16-05-2010 19:55:00'

 

Desconheço funções nativas dos BD's que retornem o ID do último INSERT feito por uma conexão ao banco, talvez até exista...

Está aí algo a ser pesquisado!

 

O caso do "mysql_insert_id()" é válido para o MySQL e somente se usada uma coluna com a opção AUTO_INCREMENT.

Existem casos onde não existe uma coluna ID ou qualquer outra com o atributo AUTO_INCREMENT.

Nesses casos não seria possível utilizar esta função.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ola a todos

 

obrigado pelas ajudas

 

bem, vamos lá:

 

mysql_insert_id();

retornou um valor absurdo!!! minha coluna autoincrement esta pra la de 4300, e esse comando retornou 918. nao entendi...

 

Qual banco de dados?

desculpe, esqueci de informar: MySQL

 

Se o INSERT é feito em uma tabela que possui dados bem diferenciados, você pode fazer um SELECT utilizando como parâmetros os dados inseridos pelo usuário (não é 100% garantido em casos onde exista a possibilidade de serem feitos 2 cadastros iguais);

não, os dados nao sao bem diferenciados. ocorre o seguinte: é um cadastro de pessoas. entao uma parte do sistema cadastra o nome. depois outra parte cadastra o rg... e assim vai. Entao para ter dois nomes iguais... bem nem preciso dizer que é facil.

 

minha duvida ainda continua...

 

obrigado a todos, pelo empenho!

 

Ola

 

estou tentando com o

 

INSERT INTO `tabela`
(blablabla...)
VALUES
(blablabla...);
SELECT LAST_INSERT_ID() AS last_id;

so que o php nao ta aceitando de jeito nenhum:

 

diz que tem erro na linha 11

 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT LAST_INSERT_ID()' at line 11

linha 11:

SELECT LAST_INSERT_ID() AS last_id;

só q se eu executo do heidisql funciona perfeitamente.

 

pq será?

o php nao executa duas consultas na mesma variavel?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, tens que executar primeiro o insert e depois o select, mas usando a mesma conexão.

 

Sobre aquela outra situação que tinha comentado, você teria que fazer um select com todos os filtros (baseado no cadastro realizado):

 

SELECT id FROM tabela WHERE nome = 'Fulano de Tal' AND rg = '1.111.111-0' AND ... ;

Compartilhar este post


Link para o post
Compartilhar em outros sites

a sintaxe q estou usando é essa:

 

mysql_query($query, $conexao

mysql_query($querylast, $conexao)

esta correto assim?

 

sera q é certeza q nao tem risco de haver uma inserção entre essas duas consultas, e a ultima retornar o valor errado?

 

obrigado pela atenção!

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

admitindo que o banco tem varias inserções ao mesmo tempo.

 

 

Neste caso o mysql_insert_id() é o mais recomendado, agora

 

retornou um valor absurdo!!! minha coluna autoincrement esta pra la de 4300, e esse comando retornou 918. nao entendi...

 

 

O erro deve ser em sua aplicação, mysql_insert_id() pega o id de cada insert na sessão ativa, assim se tiver mais de um insert no mesmo bloco, você tem que saber de qual vai pegar, se for pegar de todas tem que declarar cada uma, em uma $var diferente para a manipulação.

 

Ps.: Não há possibilidades de pegar um id diferente se outra sessão.

 

Leia o manual e informe-se melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu uso o mysql e uso mysql_fetch_array como já foi informado acima e funciona, exemplo da utilização:

  $sql="insert into resultado(cod_paciente_res,data_cadastro) values ('$id_paciente','$txt_datacadastro')";
  $rs=mysql_query($sql) or die ("Erro na Inserção na tabela de resultados. ".mysql_error());
  $id_res = mysql_insert_id();

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

O erro deve ser em sua aplicação, mysql_insert_id() pega o id de cada insert na sessão ativa, assim se tiver mais de um insert no mesmo bloco, você tem que saber de qual vai pegar, se for pegar de todas tem que declarar cada uma, em uma $var diferente para a manipulação.

 

Ps.: Não há possibilidades de pegar um id diferente se outra sessão.

 

Leia o manual e informe-se melhor.

 

acho que achei o erro: o mysql_insert_id() esta pegando os dados de uma consulta de registro de visitas na pagina. por isso esse valor.

 

agora como faço para pegar o valor da consulta que eu quero? no caso a que insere os dados do meu form???

 

ta quase lá!

 

obrigado a todos!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola pessoal, sou novo por aqui.

Se estiver em local errado podem mudar e me passar o link, por favor.

Tenho o seguinte problema:

 

Tenho uma pagina que o visitante insere nome, sobreno, o furigana de nome e sobrenome, telefone, fax, email, qtos adultos e qtas crianças.

Após preencher e mostrado os dados para confirmação.

Confirmado, é lhe apresentado a pagina com os dados inseridos mais os calculos e o numero da reserva.

 

<?php

 

$conect = mysql_connect("localhost", "", "");

if (!$conect) die ("<h1>Falha na coneccao com o Banco de Dados!</h1>");

$db = mysql_select_db("");

$id = mysql_query("SELECT LAST_INSERT_ID ()"+1);

 

 

$cpmyouji = $_POST['cpmyouji'];

$cpnamae = $_POST['cpnamae'];

$cpmyoujifuri = $_POST['cpmyoujifuri'];

$cpnamaefuri = $_POST['cpnamaefuri'];

$cpfone = $_POST['cpfone'];

$cpfax = $_POST['cpfax'];

$cpmeru = $_POST['cpmeru'];

$cpoto = $_POST['cpoto'];

$cpsho = $_POST['cpsho'];

$data = date('Y-m-d');

$ots = $cpsho+$cpoto;

$zenin = $ots;

$otok = $cpoto*'2000';

$shok = $cpsho*'0';

$king = $otok;

 

////////////////////////////////////////////////////////////////////////

 

 

 

mysql_query("INSERT INTO tkb (

tkb_id ,

tkb_fanome,

tkb_fanomefu,

tkb_nome,

tkb_nomefu,

tkb_tel,

tkb_fax,

tkb_mail,

tkb_oto,

tkb_sho,

tkb_ots,

tkb_en,

tkb_uktsuk,

tkb_data,

tkb_obs

)

VALUES (

'',

'$cpmyouji',

'$cpmyoujifuri',

'$cpnamae',

'$cpnamaefuri',

'$cpfone',

'$cpfax',

'$cpmeru',

'$cpoto',

'$cpsho',

'$ots',

'$king',

'M - $contador',

'$data',

'obs'

)

;");

 

 

?>

 

Não sei fazer para pegar o último id inserido somar mais 1 e colocar em uma variavel para ser o numero da reserva, se alguem puder me ajudar serei muito grato.

 

abracao, ocaccy.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você quer pegar o código do ultimo registro inserido e somar + 1, ex: o ultimo foi 10, então 10+1 = 11 ? Bem se for assim, você pode fazer:

$id_res = mysql_insert_id();
$id_res++;

Ñ sei em que isso irá lhe ajudar, pq imagino que esse código é gerado automaticamente.

Outra coisa, pelo que sei esse tópico já está encerrado (resolvido) você deveria abrir um novo tópico, mesmo pq são situações diferentes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.