Ir para conteúdo

POWERED BY:

Arquivado

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

Cyberoma

last_insert_id() não funciona

Recommended Posts

Boa noite galera, estou com um problema na hora de inserir dados em uma tabela e mandar o id dela pra outra (Foreing Key)..

 

Quero pegar o id da tabela empresas e inserir em empresas_id da tabela enderecos. Mas não esta funcionando

 

Eu consigo cadastrar a empresa mas nada é inserido na tabela enderecos.

 

Meu codigo:

 

if($_GET['funcao'] == "cadastrar_empresa"){

$nome = $_POST['nome'];
$cnpj = $_POST['cnpj'];

$endereco = $_POST['endereco'];
$complemento = $_POST['complemento'];
$bairro = $_POST['bairro'];
$cidade = $_POST['cidade'];
$estado = $_POST['estado'];
$cep = $_POST['cep'];

$telefone1 = $_POST['telefone1'];
$telefone2 = $_POST['telefone2'];
$celular1 = $_POST['celular1'];
$celular2 = $_POST['celular2'];
$email1 = $_POST['email1'];
$email2 = $_POST['email2'];

$sql_empresa = mysql_query("INSERT INTO empresas (id, nome, cnpj) VALUES ('','$nome','$cnpj')");

$sql_endereco = mysql_query("INSERT INTO enderecos (id, empresas_id, endereco, complemento, bairro, cidade, estado, cep) VALUES ('', LAST_INSERT_ID(), '$complemento', '$bairro', '$cidade', '$estado', '$cep')");

}

 

Aqui estar a estrutura do meu banco:

 

tabelaz.png

 

Uploaded with ImageShack.us

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se tem que fazer:

 

ultimo_Id = mysql_result(myslq_query('LAST_INSERT_ID()'),0,0);

 

$sql_endereco = mysql_query("INSERT INTO enderecos (id, empresas_id, endereco, complemento, bairro, cidade, estado, cep) VALUES ('', ultimo_Id, '$complemento', '$bairro', '$cidade', '$estado', '$cep')");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu prefiro a utilização do "nextval()", como os bancos de dados oracle e postgre possuem.

Entretanto, o mysql não possui, mas há como "emular" essa pequena função, e é extremamente útil para garantir a integridade dos dados, pois, uma vez que haja inúmeras inserções no banco, por uma fração de segundo, você pode acabar pegando o id errado.

 

Emulating nextval() function to get sequence in MySQL

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se tem que fazer:

 

ultimo_Id = mysql_result(myslq_query('LAST_INSERT_ID()'),0,0);

 

$sql_endereco = mysql_query("INSERT INTO enderecos (id, empresas_id, endereco, complemento, bairro, cidade, estado, cep) VALUES ('', ultimo_Id, '$complemento', '$bairro', '$cidade', '$estado', '$cep')");

 

parceiro eu percebi que ele não estar cadastrando nada na tabela enderecos. será que tem algum erro no foreing key??

 

eu usei esse codigo e nada foi inserido:

 

$sql_endereco = mysql_query("INSERT INTO enderecos (id, empresas_id, endereco, complemento, bairro, cidade, estado, cep) VALUES ('', '1', '$complemento', '$bairro', '$cidade', '$estado', '$cep')");

 

Olha o meu banco e olha minha query tem algum erro que eu não esteja percebendo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

1- se o id da tabela eh auto increment, entao nao precisa estar no insert, ou declare-o como null e nao como vazio, assim nao dara erro no insert

tent

$sql_empresa = mysql_query("INSERT INTO empresas (id, nome, cnpj) VALUES ('','$nome','$cnpj')");
$last_id = mysql_insert_id();
$sql_endereco = mysql_query("INSERT INTO enderecos (id, empresas_id, endereco, complemento, bairro, cidade, estado, cep) VALUES ('', '{$last_id}', '$complemento', '$bairro', '$cidade', '$estado', '$cep')");

Compartilhar este post


Link para o post
Compartilhar em outros sites

alguem percebeu algum erro?

 

você está passando os dados via post, e mas você colocou uma condição se caso os dados fossem enviados via GET, não vai receber nada mesmo.

 

Ao inves de:

 

if($_GET['funcao'] == "cadastrar_empresa"){

 

O certo SERIA:

 

if($_POST['funcao'] == "cadastrar_empresa"){

Compartilhar este post


Link para o post
Compartilhar em outros sites

você está passando os dados via post, e mas você colocou uma condição se caso os dados fossem enviados via GET, não vai receber nada mesmo.

 

Ao inves de:

 

if($_GET['funcao'] == "cadastrar_empresa"){

 

O certo SERIA:

 

if($_POST['funcao'] == "cadastrar_empresa"){

 

Não brother no formulario passsei por get:

 

<form id="form1" name="form1" method="post" action="funcoes_cadastro.php?funcao=cadastrar_empresa">

 

Tanto é que ele insere os dados na tabela empresa, mas não na tabela enderecos.

 

Deve ter um erro na minha query ou na modelagem do banco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não brother no formulario passsei por get:

 

<form id="form1" name="form1" method="post" action="funcoes_cadastro.php?funcao=cadastrar_empresa">

 

Tanto é que ele insere os dados na tabela empresa, mas não na tabela enderecos.

 

Deve ter um erro na minha query ou na modelagem do banco.

 

Olha ali onde está escrito method no seu formulario, está escrito post......

 

o erro na query acredito que esteja no seguinte:

 

{$last_id}

 

não creio que precise dessas chaves, pelo menos nunca usei, e deu certo.

é que estou no trab, senão testava aqui p/ você.

Compartilhar este post


Link para o post
Compartilhar em outros sites

qual a diferenca entre uma string q usa aspas simples e uma q usa aspas duplas?

 

as aspas simples indica uma string literal, aspas dupla significa string interpretada, você pode colocar uma variavel dentro dela q o php vai interpretar...

 

as chaves dentro de uma string interpretada servira como concatenacao...eh mais usada em oo, mas nao significa q possa ser usada em estruturado, por favor estudar mais php...ler mais o manual...você pelo menos imprimiu o sql na tela pra ver se era erro ou nao, leozincuiaba...?tenho certeza q nao...

 

outra dica cyberoma, imprima as duas sql na tela e joga no phpmyadmin, ele dira o erro melhor...ou use o die(mysql_error())

Compartilhar este post


Link para o post
Compartilhar em outros sites

qual a diferenca entre uma string q usa aspas simples e uma q usa aspas duplas?

 

as aspas simples indica uma string literal, aspas dupla significa string interpretada, você pode colocar uma variavel dentro dela q o php vai interpretar...

 

as chaves dentro de uma string interpretada servira como concatenacao...eh mais usada em oo, mas nao significa q possa ser usada em estruturado, por favor estudar mais php...ler mais o manual...você pelo menos imprimiu o sql na tela pra ver se era erro ou nao, leozincuiaba...?tenho certeza q nao...

 

outra dica cyberoma, imprima as duas sql na tela e joga no phpmyadmin, ele dira o erro melhor...ou use o die(mysql_error())

 

Igor, estou no trabalho, não tenho como testar nada aqui.

eu não sabia que as chaves serviam para isso, nem todos estudam as ferramentas a fundo, aprendi sempre o que era util e necessário pra mim. vamos focar em ajudar o rapaz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

1- se o id da tabela eh auto increment, entao nao precisa estar no insert, ou declare-o como null e nao como vazio, assim nao dara erro no insert

tent

$sql_empresa = mysql_query("INSERT INTO empresas (id, nome, cnpj) VALUES ('','$nome','$cnpj')");
$last_id = mysql_insert_id();
$sql_endereco = mysql_query("INSERT INTO enderecos (id, empresas_id, endereco, complemento, bairro, cidade, estado, cep) VALUES ('', '{$last_id}', '$complemento', '$bairro', '$cidade', '$estado', '$cep')");

 

Igor aparece esse erro

 

Column count doesn't match value count at row 1

 

O erro é na hora do segundo insert (enderecos), porque a empresa é cadastrada.

 

Afffffff que mole meuuu.

 

Estava faltando eu adicionar na query o '$endereco'.

 

$sql_empresa = mysql_query("INSERT INTO empresas (id, nome, cnpj) VALUES ('','$nome','$cnpj')") or die(mysql_error());

$last_id = mysql_insert_id();

$sql_endereco = mysql_query("INSERT INTO enderecos (id, empresas_id, endereco, complemento, bairro, cidade, estado, cep) VALUES ('','$last_id', '$endereco', '$complemento', '$bairro', '$cidade', '$estado', '$cep')") or die(mysql_error());

 

Realmente o mysql_error() é muito importante..

 

Igor, LeozinCuiabá muito Obrigado pela ajuda de vocês.. e a todos que tentaram me ajudar..

 

Desculpa, foi falta de atenção minha.

 

Obrigadooo \o/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Igor, estou no trabalho, não tenho como testar nada aqui.

eu não sabia que as chaves serviam para isso, nem todos estudam as ferramentas a fundo, aprendi sempre o que era util e necessário pra mim. vamos focar em ajudar o rapaz.

 

php nao eh uma ferramenta e sim uma linguagem...isto mostra o seu pouco conhecimento...aposto q tb você leva tempo pra fazer algo, devido ao pouco conhecimento...se você nao sabia das chaves, entao nao fale o q nao sabe, ou acabara sempre levando puxao de orelha de alguem q sabe mais...

 

cyberoma, aprecio seu agradecimento na resolucao do problema...

Compartilhar este post


Link para o post
Compartilhar em outros sites

php nao eh uma ferramenta e sim uma linguagem...isto mostra o seu pouco conhecimento...aposto q tb você leva tempo pra fazer algo, devido ao pouco conhecimento...se você nao sabia das chaves, entao nao fale o q nao sabe, ou acabara sempre levando puxao de orelha de alguem q sabe mais...

 

cyberoma, aprecio seu agradecimento na resolucao do problema...

 

Igor, seja mais humilde, você sabe um detalhe a mais e se acha o senior no php....kkk

desse jeito você mata a vontade de qualquer um em querer ajudar no forum. nem te conheço mas ta perdoado pelo arrogância. vamos continuar ajudando os que precisam.

Compartilhar este post


Link para o post
Compartilhar em outros sites

leozin, de fato sou senior, trabalho ha 7 anos com php, apenas nao gosto de me exibir (se ver outros topicos e respondi, vera isto), ja criei at mesmo um framework proprio...eu nao me acho Deus, e muito menos você o eh para me julgar...ok?eu momento disse q você eh burro, apenas disse q você tem pouco conhecimento, e tb em momento algum eu disse q você eh incapaz de saber mais, ou mesmo, saber mais q eu, basta você fazer por onde, como eu fiz...agora vamos parar com a discussao, pq o topico ja foi resolvido...

Compartilhar este post


Link para o post
Compartilhar em outros sites

leozin, de fato sou senior, trabalho ha 7 anos com php, apenas nao gosto de me exibir (se ver outros topicos e respondi, vera isto), ja criei at mesmo um framework proprio...eu nao me acho Deus, e muito menos você o eh para me julgar...ok?eu momento disse q você eh burro, apenas disse q você tem pouco conhecimento, e tb em momento algum eu disse q você eh incapaz de saber mais, ou mesmo, saber mais q eu, basta você fazer por onde, como eu fiz...agora vamos parar com a discussao, pq o topico ja foi resolvido...

 

Ok SENIOR... Fim discussão !

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.