Ir para conteúdo

POWERED BY:

Arquivado

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

Rafael Lopes da Silva

PDO::lastInsertId

Recommended Posts

Olá pessoal! ... Estou tentando capturar o último id cadastrado no banco ..... eis que descubro que tem uma função chamada

PDO::lastInsertId. ... pensei na hora ...rsrrs ... meus problemas foram resolvidos .... só que não ....rsrsr

Enfim ela está retornando uma string "0"

Vou passar o script resumido .... para ver se vcs conseguem me dar uma LUZZZZZZZZZ!

Um abraço!!! :D :D :D :D

Obs: Usei var_dump e die dentro do método lastId() nas classes PacienteController e pacienteDao ... para checar o método está sendo chamado ... Conclusão ...rsrsr ... todos estão sendo chamados perfeitamente .... porém está me devolvendo isso:

mensagem que me retorna no Browser Utilizando var_dump($objetoPacienteController -> lastId()):

string(1) "0"

Segue os scripts abaixo:

---> Classe de conexão do banco

<?php
define('DB_DSN','mysql:dbname=bd_natercia;host=127.0.0.1;port=3306;charset=utf8');
define('DB_USER','root');
define('DB_PASS','');
class Connection
{
private static $instance;
public static function getInstance()
{
if(!isset(self::$instance))
{
try
{
self::$instance = new PDO(DB_DSN, DB_USER, DB_PASS, array(PDO::ATTR_PERSISTENT => true, PDO::ATTR_ERRMODE => true, PDO::ERRMODE_EXCEPTION => true));
} catch (PDOException $e)
{
echo " Erro !". $e -> getMessage();
}
}
return self::$instance;
}
public static function prepare($sql)
{
return self::getInstance()->prepare($sql);
}
}
?>
----> Classe Paciente (Model) omitida pois não será necessária para resolução deste problema
---> Classe PacienteController
<?php
class PacienteController
{
# Atributos da classe
private $objdall;
function __construct()
{
$this -> objDao = new PacienteDao();
}
public function lastId()
{
return $this -> objDao -> lastId();
}
}
?>
-----> Classe pacienteDao
<?php
class PacienteDao
{
public function lastId()
{
$pdo = Connection::getInstance();
$id = $pdo -> lastInsertId();
return $id;
}
}
?>
---> Programa Principal
<?php
#instancio a classe pacienteController
$objetoPacienteController = new PacienteController();
#Chamo e exibo o método problemático
echo $objetoPacienteController -> lastId();
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obs: tem um erro de digitação

no script da classe pacienteController

<?php

class PacienteController
{
# Atributo da classe
// erro de digitação private $objdall;
private $objDao;
function __construct()
{
$this -> objDao = new PacienteDao();
}
public function lastId()
{
return $this -> objDao -> lastId();
}
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

O lastInsertId pega o ID do último registro que foi inserido na sua conexão com o banco de dados! Ou seja, você vai usá-lo se você precisar inserir o registro na tabela e já no mesmo momento precisar utilizar o id do mesmo.

Pra pegar o último registro da tabela independente se você inserir algo ou não, você usa:

SELECT fields FROM table WHERE condition ORDER BY id DESC LIMIT 1

Ordena do último ao primeiro e limita o resultado a apenas uma linha ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro amigo

Rafael

Abaixo posto trecho do meu código fonte para auxiliar no uso do lastInsertId().

    <?php

    $imovelTitulo        = strip_tags(trim($_POST['titulo']));
    $imovelNegocio       = strip_tags(trim($_POST['negocio']));
    $imovelTipo          = strip_tags(trim($_POST['tipo']));
    $imovelValor         = strip_tags(trim($_POST['valor']));
    $imovelDescricao     = strip_tags(trim($_POST['descricao']));
    $imovelComodos       = strip_tags(trim($_POST['comodos']));
    $imovelSuites        = strip_tags(trim($_POST['suites']));
    $imovelBanheiros     = strip_tags(trim($_POST['banheiros']));
    $imovelSalas         = strip_tags(trim($_POST['salas']));

    if($imovelChurrasqueira==''){ $imovelChurrasqueira='N'; } else { $imovelChurrasqueira=strip_tags(trim($_POST['churrasqueira']));}

    if($imovelGaragem == ''){ $imovelGaragem = 'N'; } else { $imovelGaragem = strip_tags(trim($_POST['garagem'])); }

    if($imovelServico == ''){ $imovelServico = 'N'; } else { $imovelServico = strip_tags(trim($_POST['servico'])); }            
    
    if($imovelPiscina == ''){ $imovelPiscina = 'N'; } else { $imovelPiscina = strip_tags(trim($_POST['piscina'])); }

    if($imovelFinancia == ''){ $imovelFinancia = 'N'; } else { $imovelFinancia = strip_tags(trim($_POST['financia'])); }
   
    $imovelFacilidades   = strip_tags(trim($_POST['facilidades']));

    $imovelVisitas  = '1';
    $imovelCadastro = date('Y-m-d H:m:s');
    $imovelUpdate   = date('Y-m-d H:m:s');
    $datafinal      = date('Y-m-d H:m:s',strtotime('+1 month'));
    $imovelStatus   = 'pendente';

    $imovelThumb  = $_FILES['img'];
    $imovelPasta  = '../midias/';
    $imgPermitido = array('image/jpg','image/jpeg','image/pjpg');
    $contarImg    = count($imovelThumb['name']);

    require("sistema/upload.php");

    for($i=0; $i<$contarImg; $i++){
      
      $imagemNome    = $imovelThumb['name'][$i];
      $imagemCaminho = $imovelThumb['tmp_name'][$i];
      $imagemTipo    = $imovelThumb['type'][$i];
      
      if(!empty($imagemNome) && in_array($imagemTipo, $imgPermitido)){
         $nome = 'cliente='.$clienteId.'-'.md5(uniqid(rand(), true)).'.jpg';
         Redimensionar($imagemCaminho, $nome, 500, $imovelPasta);        
         
         $sql_cadastraImvel  = 'INSERT INTO imoveis (clienteId, imovelVisitas, imovelTitulo, imovelThumb, imovelTipo, imovelValor, imovelNegocio, imovelDescricao, imovelComodos, imovelSuites, imovelBanheiros, imovelSalas, imovelChurrasqueira, imovelGaragem, imovelServico, imovelPiscina, imovelFinancia, imovelFacilidades, imovelCadastro, imovelUpdate, imovelTermino, imovelStatus) ';
         $sql_cadastraImvel .= 'VALUES (:clienteId, :imovelVisitas, :imovelTitulo, :imovelThumb, :imovelTipo, :imovelValor, 
                                :imovelNegocio, :imovelDescricao, :imovelComodos, :imovelSuites, :imovelBanheiros, :imovelSalas,
                                :imovelChurrasqueira, :imovelGaragem, :imovelServico, :imovelPiscina, :imovelFinancia,
                                :imovelFacilidades, :imovelCadastro, :imovelUpdate, :imovelTermino, :imovelStatus)';
                    
       try{
         $query_cadastraImovel = $conecta->prepare($sql_cadastraImvel);
         $query_cadastraImovel->bindValue(':clienteId',$clienteId,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelVisitas',$imovelVisitas,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelTitulo',$imovelTitulo,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelThumb',$nome,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelTipo',$imovelTipo,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelValor',$imovelValor,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelNegocio',$imovelNegocio,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelDescricao',$imovelDescricao,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelComodos',$imovelComodos,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelSuites',$imovelSuites,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelBanheiros',$imovelBanheiros,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelSalas',$imovelSalas,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelChurrasqueira',$imovelChurrasqueira,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelGaragem',$imovelGaragem,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelServico',$imovelServico,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelPiscina',$imovelPiscina,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelFinancia',$imovelFinancia,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelFacilidades',$imovelFacilidades,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelCadastro',$imovelCadastro,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelUpdate',$imovelUpdate,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelTermino',$datafinal,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelStatus',$imovelStatus,PDO::PARAM_STR);
         $query_cadastraImovel->execute();
          
         echo '<h2>Imóvel Cadastrado, para melhor vendê-lo preencha o resto dos formulários!</h2>'; 
         

         } catch(PDOexception $error_cadastraImovel){

           echo 'Erro ao cadastrar'.$error_cadastraImovel->getMessage(); 

         }

       /*Abre Conexão com o BcoDados para Armazenar a variável Código do Imóvel*/
         $imovelId = $conecta->lastInsertId();

         $sql_cadSlider  = 'INSERT INTO slider (titulo, imovelId, imagem, ordem, estado) ';
         $sql_cadSlider .= 'VALUES (:titulo, :imovelId, :imagem, :ordem, :estado)';
                    
         try{
           $query_cadSlider = $conecta->prepare($sql_cadSlider);
           $query_cadSlider->bindValue(':titulo',$imovelTitulo,PDO::PARAM_STR);
           $query_cadSlider->bindValue(':imovelId',$imovelId,PDO::PARAM_STR);
           $query_cadSlider->bindValue(':imagem',$nome,PDO::PARAM_STR);
           $query_cadSlider->bindValue(':ordem','1',PDO::PARAM_STR);
           $query_cadSlider->bindValue(':estado','2',PDO::PARAM_STR);
           $query_cadSlider->execute();
                
           } catch(PDOexception $error_cadSlider){
             echo 'Erro ao cadastrar'.$error_cadSlider->getMessage(); 
           }         

        
      } else {
        echo '<h1>Por favor!<br/>
                  Volte ao navegador e cadastre uma imagem com extensão <strong>.JPG</strong> para continuar seu cadastro!</h1>';
        die(); //die = para a leitura do código, não deixa continuar.
      }
  
 }

?> 

Espero ter ajudado, se der certo poste um OK.

Abraços,

Renato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vlw Mateus Silva por sua excelente explicação!

Realmente eu quero inserir e depois pegar o id do ultimo registro inserido.

Eu que não tinha colocado o script corretamente.

Mas o importante que com sua ajuda consegui resolver meu problema e APREENDI mais uma coisa ...rsrsr. ... pois estava testando o lastInsertId sem antes inserir ... não sabia que tinha essa dependencia .... rsrsr ...

Agora vou colocar o Script funcionando corretamente graças a sua ajuda.

---> Classe de conexão do banco

<?php
define('DB_DSN','mysql:dbname=bd_natercia;host=127.0.0.1;port=3306;charset=utf8');
define('DB_USER','root');
define('DB_PASS','');
class Connection
{
private static $instance;
public static function getInstance()
{
if(!isset(self::$instance))
{
try
{
self::$instance = new PDO(DB_DSN, DB_USER, DB_PASS, array(PDO::ATTR_PERSISTENT => true, PDO::ATTR_ERRMODE => true, PDO::ERRMODE_EXCEPTION => true));
} catch (PDOException $e)
{
echo " Erro !". $e -> getMessage();
}
}
return self::$instance;
}
public static function prepare($sql)
{
return self::getInstance()->prepare($sql);
}
}
?>
---> Classe PacienteController
<?php
class PacienteController
{
# Atributos da classe
private $objDao;
function __construct()
{
$this -> objDao = new PacienteDao();
}
public function lastId()
{
return $this -> objDao -> lastId();
}
}
?>
-----> Classe pacienteDao
<?php
class PacienteDao
{
public function lastId()
{
$pdo = Connection::getInstance();
$lastId = $pdo->lastInsertId();
return $lastId;
}
}
?>
---> Programa Principal
<?php
#instancio a classe pacienteController
$objetoPacienteController = new PacienteController();
#instancio a classe telefone
$objetoTelefone = new Telefone();
//Não esqueçam de inserir primeiro ... não faça igual a mim ...rsrsr
$objetoPacienteController -> inserirPaciente($objetoPaciente);
#Chamo e exibo o método
$lastId = $objetoPacienteController ->lastId();
// Agora é sair pro abraço ..rsrsr
$objetoTelefone -> setFkID($lastId);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro amigo

Rafael

Abaixo posto trecho do meu código fonte para auxiliar no uso do lastInsertId().

    <?php

    $imovelTitulo        = strip_tags(trim($_POST['titulo']));
    $imovelNegocio       = strip_tags(trim($_POST['negocio']));
    $imovelTipo          = strip_tags(trim($_POST['tipo']));
    $imovelValor         = strip_tags(trim($_POST['valor']));
    $imovelDescricao     = strip_tags(trim($_POST['descricao']));
    $imovelComodos       = strip_tags(trim($_POST['comodos']));
    $imovelSuites        = strip_tags(trim($_POST['suites']));
    $imovelBanheiros     = strip_tags(trim($_POST['banheiros']));
    $imovelSalas         = strip_tags(trim($_POST['salas']));

    if($imovelChurrasqueira==''){ $imovelChurrasqueira='N'; } else { $imovelChurrasqueira=strip_tags(trim($_POST['churrasqueira']));}

    if($imovelGaragem == ''){ $imovelGaragem = 'N'; } else { $imovelGaragem = strip_tags(trim($_POST['garagem'])); }

    if($imovelServico == ''){ $imovelServico = 'N'; } else { $imovelServico = strip_tags(trim($_POST['servico'])); }            
    
    if($imovelPiscina == ''){ $imovelPiscina = 'N'; } else { $imovelPiscina = strip_tags(trim($_POST['piscina'])); }

    if($imovelFinancia == ''){ $imovelFinancia = 'N'; } else { $imovelFinancia = strip_tags(trim($_POST['financia'])); }
   
    $imovelFacilidades   = strip_tags(trim($_POST['facilidades']));

    $imovelVisitas  = '1';
    $imovelCadastro = date('Y-m-d H:m:s');
    $imovelUpdate   = date('Y-m-d H:m:s');
    $datafinal      = date('Y-m-d H:m:s',strtotime('+1 month'));
    $imovelStatus   = 'pendente';

    $imovelThumb  = $_FILES['img'];
    $imovelPasta  = '../midias/';
    $imgPermitido = array('image/jpg','image/jpeg','image/pjpg');
    $contarImg    = count($imovelThumb['name']);

    require("sistema/upload.php");

    for($i=0; $i<$contarImg; $i++){
      
      $imagemNome    = $imovelThumb['name'][$i];
      $imagemCaminho = $imovelThumb['tmp_name'][$i];
      $imagemTipo    = $imovelThumb['type'][$i];
      
      if(!empty($imagemNome) && in_array($imagemTipo, $imgPermitido)){
         $nome = 'cliente='.$clienteId.'-'.md5(uniqid(rand(), true)).'.jpg';
         Redimensionar($imagemCaminho, $nome, 500, $imovelPasta);        
         
         $sql_cadastraImvel  = 'INSERT INTO imoveis (clienteId, imovelVisitas, imovelTitulo, imovelThumb, imovelTipo, imovelValor, imovelNegocio, imovelDescricao, imovelComodos, imovelSuites, imovelBanheiros, imovelSalas, imovelChurrasqueira, imovelGaragem, imovelServico, imovelPiscina, imovelFinancia, imovelFacilidades, imovelCadastro, imovelUpdate, imovelTermino, imovelStatus) ';
         $sql_cadastraImvel .= 'VALUES (:clienteId, :imovelVisitas, :imovelTitulo, :imovelThumb, :imovelTipo, :imovelValor, 
                                :imovelNegocio, :imovelDescricao, :imovelComodos, :imovelSuites, :imovelBanheiros, :imovelSalas,
                                :imovelChurrasqueira, :imovelGaragem, :imovelServico, :imovelPiscina, :imovelFinancia,
                                :imovelFacilidades, :imovelCadastro, :imovelUpdate, :imovelTermino, :imovelStatus)';
                    
       try{
         $query_cadastraImovel = $conecta->prepare($sql_cadastraImvel);
         $query_cadastraImovel->bindValue(':clienteId',$clienteId,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelVisitas',$imovelVisitas,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelTitulo',$imovelTitulo,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelThumb',$nome,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelTipo',$imovelTipo,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelValor',$imovelValor,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelNegocio',$imovelNegocio,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelDescricao',$imovelDescricao,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelComodos',$imovelComodos,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelSuites',$imovelSuites,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelBanheiros',$imovelBanheiros,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelSalas',$imovelSalas,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelChurrasqueira',$imovelChurrasqueira,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelGaragem',$imovelGaragem,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelServico',$imovelServico,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelPiscina',$imovelPiscina,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelFinancia',$imovelFinancia,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelFacilidades',$imovelFacilidades,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelCadastro',$imovelCadastro,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelUpdate',$imovelUpdate,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelTermino',$datafinal,PDO::PARAM_STR);
         $query_cadastraImovel->bindValue(':imovelStatus',$imovelStatus,PDO::PARAM_STR);
         $query_cadastraImovel->execute();
          
         echo '<h2>Imóvel Cadastrado, para melhor vendê-lo preencha o resto dos formulários!</h2>'; 
         

         } catch(PDOexception $error_cadastraImovel){

           echo 'Erro ao cadastrar'.$error_cadastraImovel->getMessage(); 

         }

       /*Abre Conexão com o BcoDados para Armazenar a variável Código do Imóvel*/
         $imovelId = $conecta->lastInsertId();

         $sql_cadSlider  = 'INSERT INTO slider (titulo, imovelId, imagem, ordem, estado) ';
         $sql_cadSlider .= 'VALUES (:titulo, :imovelId, :imagem, :ordem, :estado)';
                    
         try{
           $query_cadSlider = $conecta->prepare($sql_cadSlider);
           $query_cadSlider->bindValue(':titulo',$imovelTitulo,PDO::PARAM_STR);
           $query_cadSlider->bindValue(':imovelId',$imovelId,PDO::PARAM_STR);
           $query_cadSlider->bindValue(':imagem',$nome,PDO::PARAM_STR);
           $query_cadSlider->bindValue(':ordem','1',PDO::PARAM_STR);
           $query_cadSlider->bindValue(':estado','2',PDO::PARAM_STR);
           $query_cadSlider->execute();
                
           } catch(PDOexception $error_cadSlider){
             echo 'Erro ao cadastrar'.$error_cadSlider->getMessage(); 
           }         

        
      } else {
        echo '<h1>Por favor!<br/>
                  Volte ao navegador e cadastre uma imagem com extensão <strong>.JPG</strong> para continuar seu cadastro!</h1>';
        die(); //die = para a leitura do código, não deixa continuar.
      }
  
 }

?> 

Espero ter ajudado, se der certo poste um OK.

Abraços,

Renato

Vlw Amigo Pela Ajuda!!! :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

O lastInsertId pega o ID do último registro que foi inserido na sua conexão com o banco de dados! Ou seja, você vai usá-lo se você precisar inserir o registro na tabela e já no mesmo momento precisar utilizar o id do mesmo.

Pra pegar o último registro da tabela independente se você inserir algo ou não, você usa:

SELECT fields FROM table WHERE condition ORDER BY id DESC LIMIT 1

Ordena do último ao primeiro e limita o resultado a apenas uma linha ;)

Mandou bem na explicação! ... Vlw pela Ajuda!

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.