-rafael- 1 Denunciar post Postado Maio 16, 2010 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
Matheus Brito 12 Denunciar post Postado Maio 16, 2010 mysql_insert_id(); Abs Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Maio 16, 2010 Qual banco de dados? Compartilhar este post Link para o post Compartilhar em outros sites
Horphoz 0 Denunciar post Postado Maio 16, 2010 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
-rafael- 1 Denunciar post Postado Maio 17, 2010 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
Horphoz 0 Denunciar post Postado Maio 17, 2010 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
-rafael- 1 Denunciar post Postado Maio 17, 2010 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
Williams Duarte 431 Denunciar post Postado Maio 17, 2010 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
Marcos Barbosa 1 Denunciar post Postado Maio 17, 2010 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
-rafael- 1 Denunciar post Postado Maio 17, 2010 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
Marcos Barbosa 1 Denunciar post Postado Maio 17, 2010 Veja o post que eu coloquei logo acima. Compartilhar este post Link para o post Compartilhar em outros sites
-rafael- 1 Denunciar post Postado Maio 17, 2010 ok problema resolvido com o mysql_insert_id(). obrigado a todos!!! Compartilhar este post Link para o post Compartilhar em outros sites
ocaccy 0 Denunciar post Postado Junho 3, 2010 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
Marcos Barbosa 1 Denunciar post Postado Junho 4, 2010 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