0
I need to use lastInsertId() more than once in my application. Follow an example of such an event:
<?php
//CONEXÃO COM O BANCO DE DADOS
$pdo=new PDO("mysql:host=localhost;dbname=xxx","xxx","xxx");
//VARIÁVEIS COM DADOS DO FORMULÁRIO
$nome = $_POST["nome"];
$email = $_POST["email"];
$senha = $_POST["senha"];
$senhaConfirm = $_POST["senhaConfirm"];
$telefone = $_POST["telefone"];
$celular = $_POST["celular"];
$rua = $_POST["rua"];
$bairro = $_POST["bairro"];
$numero = $_POST["numero"];
$cidade = $_POST["cidade"];
$estado = $_POST["estado"];
$cep = $_POST["cep"];
$complemento = $_POST["complemento"];
$usuario = $_POST["usuario"];
$nomeMercado = $_POST["nomeMercado"];
$cnpj = $_POST["cnpj"];
$telefoneMercado = $_POST["telefoneMercado"];
$celularMercado = $_POST["celularMercado"];
$expedienteInicio = $_POST["expedienteInicio"];
$expedienteFim = $_POST["expedienteFim"];
$arquivo = $_POST["arquivo"];
//INICIO DA TRANSAÇÃO
$pdo->beginTransaction();
//INSERÇÃO DE DADOS NA TABELA ENDEREÇO
$insertEndereco = $pdo->prepare("INSERT INTO ENDERECO(BAIRRO, CEP, CIDADE, COMPLEMENTO, ESTADO, NUMERO, RUA) VALUES(:bairro, :cep, :cidade, :complemento, :estado, :numero, :rua)");
$insertEndereco->bindValue(":bairro",$bairro);
$insertEndereco->bindValue(":cep",$cep);
$insertEndereco->bindValue(":cidade",$cidade);
$insertEndereco->bindValue(":complemento",$complemento);
$insertEndereco->bindValue(":estado",$estado);
$insertEndereco->bindValue(":numero",$numero);
$insertEndereco->bindValue(":rua",$rua);
$insertEndereco->execute();
//VERIFICA SE A INSERÇÃO DE DADOS DE ENDEREÇO RETORNA TRUE(FOI REALIZADA)
if (!$insertEndereco) {
die("Oops, houve um erro no cadastro de seu endereço, tente novamente ou contacte a adaministração.");
}
$cod_endereco = $pdo->lastInsertId();//O LAST_
//INSERÇÃO DE DADOS NA TABELA USUARIO
$insertUsuario = $pdo->prepare("INSERT INTO USUARIOS(COD_ENDERECO, NOME_USUARIO, E-MAIL_USUARIO, SENHA_USUARIO, TELEFONE, CELULAR, TIPO_USUARIO,) VALUES(:cod_endereco,:nome,:email, :senha, :telefone, :celular, :usuario)");
$insertUsuario->bindValue(":cod_endereco",$cod_endereco);
$insertUsuario->bindValue(":nome",$nome);
$insertUsuario->bindValue(":email",$email);
$insertUsuario->bindValue(":senha",$senha);
$insertUsuario->bindValue(":telefone",$telefone);
$insertEndereco->bindValue(":celular",$celular);
$insertEndereco->bindValue(":usuario",$usuario);
$insertEndereco->execute();
if (!$insertUsuario) {
die("Oops, houve um erro no cadastro de seus dados pessoais, tente novamente ou contacte a adaministração.");
}
$cod_usuario = $pdo->lastInsertId();
//INSERÇÃO DE DADOS NA TABELA SUPERMERCADO
$insertMercado = $pdo->prepare("INSERT INTO SUPERMERCADO (CNPJ, NOME, FOTO_SUPERMERCADO, INICIO_EXPEDIENTE,
FIM_EXPEDIENTE, TELEFONE) VALUES (:cod_endereco_mercado, :cod_usuario, :cnpj, :nomeMercado, :arquivo, :expedienteInicio, :expedienteFim, :$telefoneMercado)");
$insertMercado->bindValue(":cod_endereco_mercado",$pdo->lastInsertId());
$insertMercado->bindValue(":cod_usuario",$cod_usuario);
$insertMercado->bindValue(":cnpj",$cnpj);
$insertMercado->bindValue(":nomeMercado",$nomeMercado);
$insertMercado->bindValue(":arquivo",$arquivo);
$insertMercado->bindValue(":expedienteInicio",$expedienteInicio);
$insertMercado->bindValue(":expedienteFim",$expedienteFim);
$insertMercado->bindValue(":telefoneMercado",$telefoneMercado);
$insertMercado->execute();
//CASO TENHA DADO ALGUM ERRO NA TRANSAÇÃO rollBack IRÁ CANCELAR TODAS ELAS
if (!$insertMercado) {
$pdo->rollBack();
die("Oops, houve um erro no cadastro de seu mercado, tente novamente ou contacte a adaministração.");
}
//FINALIZANDO TRANSAÇÃO
$pdo->commit();
echo($cod_endereco);
echo($cod_usuario);
echo($usuario); ?>
By doing so, I can only capture the first value of lastInsertId(). Would someone like to tell me how I manage to capture the values of both?
Just turn the command
$pdo->execute
()pra cada operação e recuperar o id atraves de
$Pdo->lastInsertId()`– MarceloBoni
I’m already doing this, I’ll edit my code to make it clearer.
– Anderson Amorim