Ir para conteúdo

POWERED BY:

Arquivado

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

gedmilson

[Resolvido] Recuperar ultimo id do insert

Recommended Posts

Estou tentando adaptar o inserte que retorne o ultimo id. mas não sei como fazer nesse codigo

     public function Cadastrar(Turma $turma) {
         try {
             $sql = "INSERT INTO turma (turma, nivel, descricao, cargahoraria,endereco, cidade) VALUES "
                     . "(:turma, :nivel, :descricao, :cargahoraria, :endereco, :cidade)";
             $param = array(
                
                 ":turma" => $turma->getTurma(),
                 ":nivel" => $turma->getNivel(),
                 ":descricao" => $turma->getDescricao(),
                 ":cargahoraria" => $turma->getCarga(),
                 ":endereco" => $turma->getEndereco(),
                 ":cidade" => $turma->getCidade()

               //  ":maxvaga" => $turma->getMaxvaga(),
               //  ":minvaga" => $turma->getMinvaga()

             );

             return $this->pdo->ExecuteNonQuery($sql, $param);
			return $this->pdo->lastInsertId();
         } catch (PDOException $ex) {
             if ($this->debug) {
                 echo "ERRO: {$ex->getMessage()} LINE: {$ex->getLine()}";

             }
             return false;
         }
     }

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Onde você está errando é nesse trecho aqui:

return $this->pdo->ExecuteNonQuery($sql, $param);
return $this->pdo->lastInsertId();

Você não pode dar return em 2 coisas ao mesmo tempo, ou você dá return em um ou dá return em outro. Uma opção se quiser pegar os dois com um único return de uma vez, abre um array():

return array(
"result_query" => $this->pdo->ExecuteNonQuery($sql, $param),
"last_id"      => $this->pdo->lastInsertId()
);

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

// adicionei essa linha
private $lastid;

public function Cadastrar(Turma $turma) {
         try {
             $sql = "INSERT INTO turma (turma, nivel, descricao, cargahoraria,endereco, cidade) VALUES "
                     . "(:turma, :nivel, :descricao, :cargahoraria, :endereco, :cidade)";
             $param = array(
                
                 ":turma" => $turma->getTurma(),
                 ":nivel" => $turma->getNivel(),
                 ":descricao" => $turma->getDescricao(),
                 ":cargahoraria" => $turma->getCarga(),
                 ":endereco" => $turma->getEndereco(),
                 ":cidade" => $turma->getCidade()

               //  ":maxvaga" => $turma->getMaxvaga(),
               //  ":minvaga" => $turma->getMinvaga()

             );

// adicionei essa linha
$this->setLastId($this->pdo->lastInsertId());

             return $this->pdo->ExecuteNonQuery($sql, $param);
         } catch (PDOException $ex) {
             if ($this->debug) {
                 echo "ERRO: {$ex->getMessage()} LINE: {$ex->getLine()}";

             }
             return false;
         }
     }

// adicionei esses métodos
public function getLastId(){
    return $this->lastid;
}
public function setLastId($id){
    $this->lastid = $id;
}

Alterei o código

Adicionei esses trechos:

$this->setLastId($this->pdo->lastInsertId());

setLastId() vai setar o último ID.

public function getLastId(){
   	return $this->lastid;
}

pelo método getLastId() você vai conseguir pegar o último id.

aí onde você usa a classe que tem o método Cadastrar, é só você fazer algo assim:

$exemplo = new Classe();

$exemplo->Cadastrar("turma 2018");
$exemplo->getLastId(); // vai pegar o último ID inserido

Se tiver com dificuldade poem todo seu código aí pra gente ver e tentar ajudar.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito Obrigado pela a dica:

e se eu quiser fazer um teste. como dar para fazer?

é que esse código está dentro de um DAO, passa pelo Controller e só depois vai pra a VIEW.

resumindo! eu são sei como testar esse código.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
5 minutos atrás, gedmilson disse:

Muito Obrigado pela a dica:

e se eu quiser fazer um teste. como dar para fazer?

é que esse código está dentro de um DAO, passa pelo Controller e só depois vai pra a VIEW.

resumindo! eu são sei como testar esse código.

Abre um arquivo em branco no seu servidor, test_classe.php só pra fazer esse teste, aí você chama a classe onde está esse método Cadastrar.

require_once("caminho/ate/a/classe");

$instancia = new Classe(); // instancia a classe

$instancia->Cadastrar("turma 2018"); // chama o método
$instancia->getLastId(); // chama o método

 

2 minutos atrás, gedmilson disse:

Desculpe minha ignorância! mas estou começando agora a trabalhar com orientação a objetos.

Que isso, esquenta a cabeça não, o negócio é perguntar mesmo e ir testando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz uma classe parecida com essa na view

require_once("../Controller/CategoriaController.php");

vou tentar chama do jeito que esta me dizendo.

Muito obrigado pela a sua ajuda..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não retornou nada

Ai eu tentei fazer dessa forma

$MaxId = $turmaController->getLastId();
    echo $MaxId;

e também não obtive nenhum exito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você fez as alterações com o código que te passei na classe que você ta chamando? Qual é o nome da classe? Consegue por ela inteira aqui?

Pq pro getLastId() funcionar precisa dessas alterações na classe onde ta o método Cadastrar():

// adicionar a propriedade $lastid
private $lastid;

// adicionar essa linha dentro do método Cadastrar, uma linha antes de return;
$this->setLastId($this->pdo->lastInsertId());

// adicionar esses 2 métodos
public function getLastId(){
    return $this->lastid;
}
public function setLastId($id){
    $this->lastid = $id;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

vou colocar

 require_once("Banco.php");
 

 class TurmaDAO {

    private $pdo;
    private $debug;

     public function __construct() {
         $this->pdo = new Banco();
         $this->debug = true;
     }

      public function getLastId(){
       	 	return $this->lastid;
    }
    public function setLastId($id){
        	$this->lastid = $id;
    }
	

     public function Cadastrar(Turma $turma) {
         try {
             $sql = "INSERT INTO turma (turma, nivel, descricao, cargahoraria,endereco, cidade) VALUES "
                     . "(:turma, :nivel, :descricao, :cargahoraria, :endereco, :cidade)";
             $param = array(
                
                 ":turma" => $turma->getTurma(),
                 ":nivel" => $turma->getNivel(),
                 ":descricao" => $turma->getDescricao(),
                 ":cargahoraria" => $turma->getCarga(),
                 ":endereco" => $turma->getEndereco(),
                 ":cidade" => $turma->getCidade()

             );
             $this->setLastId($this->pdo->lastInsertId());
             // adicionar esses 2 métodos
             return array(
                "result_query" => $this->pdo->ExecuteNonQuery($sql, $param),
                "last_id"      => $this->pdo->lastInsertId($sql)
                );
             return $this->pdo->ExecuteNonQuery($sql, $param);
         } catch (PDOException $ex) {
             if ($this->debug) {
                 echo "ERRO: {$ex->getMessage()} LINE: {$ex->getLine()}";

             }
             return false;
         }
     }
}

Inseri o seu código logo acima.

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php

date_default_timezone_set('America/Sao_Paulo');


/**
 * PDO PHP Persistence Class
 * https://github.com/victortassinari/pdophpclass
 *
 *
 * @author Victor Tassinari - victortassinarix@gmail.com
 */
 
class Banco {

    private static $connection;
    private $debug;
    private $server;
    private $user;
    private $password;
    private $database;

    public function __construct() {
        $this->debug = true;
        $this->server = "";
        $this->user = "";
        $this->password = "";
        $this->database = "";
    }

    /**
     * Create a database connection or return the connection already open using Singletion Design Patern
     * @return PDOConnection|null
     */
    public function getConnection() {
        try {
            if (self::$connection == null) {
                self::$connection = new PDO("mysql:host={$this->server};dbname={$this->database};charset=utf8", $this->user, $this->password);
                self::$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                self::$connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
                self::$connection->setAttribute(PDO::ATTR_PERSISTENT, true);
            }
            return self::$connection;
        } catch (PDOException $ex) {
            if ($this->debug) {
                echo "<b>Error on getConnection(): </b>" . $ex->getMessage() . "<br/>";
            }
            die();
            return null;
        }
    }

    /**
     * Unset connection
     * @return void
     */
    public function Disconnect() {
        $this->connection = null;
    }

    /**
     * Return the last id of insert statement
     * @return int
     */
    public function GetLastID() {
        return $this->getConnection()->lastInsertId();
    }

    /**
     * Start one database transaction
     * @return void
     */
    public function BeginTransaction() {
        return $this->getConnection()->beginTransaction();
    }

    /**
     * Commit changes on opened transaction
     * @return void
     */
    public function Commit() {
        return $this->getConnection()->commit();
    }

    /**
     * Roolback changes on opened transaction
     * @return void
     */
    public function Rollback() {
        return $this->getConnection()->rollBack();
    }

    /**
     * returns the result of a query (select) of only one row
     * @param string $sql the sql string
     * @param array $params the array of parameters (array(":col1" => "val1",":col2" => "val2"))
     * @return one position array for the result of query
     */
    public function ExecuteQueryOneRow($sql, $params = null) {
        try {
            $stmt = $this->getConnection()->prepare($sql);
            $stmt->execute($params);
            return $stmt->fetch(PDO::FETCH_ASSOC);
        } catch (PDOException $ex) {
            if ($this->debug) {
                echo "<b>Error on ExecuteQueryOneRow():</b> " . $ex->getMessage() . "<br />";
                echo "<br /><b>SQL: </b>" . $sql . "<br />";

                echo "<br /><b>Parameters: </b>";
                print_r($params) . "<br />";
            }
            die();
            return null;
        }
    }

    /**
     * returns the result of a query (select)
     * @param string $sql the sql string
     * @param array $params the array of parameters (array(":col1" => "val1",":col2" => "val2"))
     * @return array for the result of query
     */
    public function ExecuteQuery($sql, $params = null) {
        try {
            $stmt = $this->getConnection()->prepare($sql);
            $stmt->execute($params);
            return $stmt->fetchAll(PDO::FETCH_ASSOC);
        } catch (PDOException $ex) {
            if ($this->debug) {
                echo "<b>Error on ExecuteQuery():</b> " . $ex->getMessage() . "<br />";
                echo "<br /><b>SQL: </b>" . $sql . "<br />";

                echo "<br /><b>Parameters: </b>";
                print_r($params) . "<br />";
            }
            die();
            return null;
        }
    }

    /**
     * returns if the query was successful
     * @param string $sql the sql string
     * @param array $params the array of parameters (array(":col1" => "val1",":col2" => "val2"))
     * @return boolean
     */
    public function ExecuteNonQuery($sql, $params = null) {
        try {
            $stmt = $this->getConnection()->prepare($sql);
            return $stmt->execute($params);
        } catch (PDOException $ex) {
            if ($this->debug) {
                echo "<b>Error on ExecuteNonQuery():</b> " . $ex->getMessage() . "<br />";
                echo "<br /><b>SQL: </b>" . $sql . "<br />";

                echo "<br /><b>Parameters: </b>";
                print_r($params) . "<br />";
            }
            die();
            return false;
        }
    }

}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na sua classe Banco já possui um método pra pegar o último id, o nome do método é GetLastId(), ta na linha 65.

Agora faz o seguinte, troca sua classe turmaDAO inteira por essa aqui:

require_once("Banco.php");
 

 class TurmaDAO {

    private $pdo;
    private $debug;
    private $lastid;

    public function __construct() {
        $this->pdo = new Banco();
        $this->debug = true;
    }

    public function Cadastrar($turma) {
         try {
             $sql = "INSERT INTO turma (turma, nivel, descricao, cargahoraria,endereco, cidade) VALUES "
                     . "(:turma, :nivel, :descricao, :cargahoraria, :endereco, :cidade)";
             $param = array(
                
                 ":turma" => $turma->getTurma(),
                 ":nivel" => $turma->getNivel(),
                 ":descricao" => $turma->getDescricao(),
                 ":cargahoraria" => $turma->getCarga(),
                 ":endereco" => $turma->getEndereco(),
                 ":cidade" => $turma->getCidade()

               //  ":maxvaga" => $turma->getMaxvaga(),
               //  ":minvaga" => $turma->getMinvaga()

             );

             $res = $this->pdo->ExecuteNonQuery($sql, $param);
             $this->setLastId($this->pdo->GetLastId());

             return $res;

         } catch (PDOException $ex) {
             if ($this->debug) {
                 echo "ERRO: {$ex->getMessage()} LINE: {$ex->getLine()}";

             }
             return false;
         }
    }
    public function getLastId(){
       	 	return $this->lastid;
    }
    public function setLastId($id){
        	$this->lastid = $id;
    }
}

Agora vai lá naquele seu arquivo de teste e poem esse código aqui:

require_once("../seucontroller");

$turma = new TurmaDAO();
echo "<pre>";
print_r($turma->Cadastrar(seus parametros));
echo "</pre>";
echo "<pre>";
print_r($turma->getLastId());
echo "</pre>";

Testei aqui e funcionou, agora é fazer funcionar aí no seu servidor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu mudei o

require_once("../seucontroller");

para

    require_once("../Controller/TurmaController.php");


$turma = new TurmaDAO();
echo "<pre>";
print_r($turma->Cadastrar($turma));
echo "</pre>";
echo "<pre>";
print_r($turma->getLastId());
echo "</pre>";

apareceu esse erro

Fatal error:  Call to undefined method TurmaDAO::getTurma() in C:\xampp\htdocs\IPAE\DAL\TurmaDAO.php on line 22

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tinha tirado o "Turma" de: Cadastrar(Turma $turma), não sei se isso interfere, coloquei novamente, testa aí e vê se vai agora:

require_once("Banco.php");
 

 class TurmaDAO {

    private $pdo;
    private $debug;
    private $lastid;

    public function __construct() {
        $this->pdo = new Banco();
        $this->debug = true;
    }

    public function Cadastrar(Turma $turma) {
         try {
             $sql = "INSERT INTO turma (turma, nivel, descricao, cargahoraria,endereco, cidade) VALUES (:turma, :nivel, :descricao, :cargahoraria, :endereco, :cidade)";
             $param = array(
                
                 ":turma" => $turma->getTurma(),
                 ":nivel" => $turma->getNivel(),
                 ":descricao" => $turma->getDescricao(),
                 ":cargahoraria" => $turma->getCarga(),
                 ":endereco" => $turma->getEndereco(),
                 ":cidade" => $turma->getCidade()

               //  ":maxvaga" => $turma->getMaxvaga(),
               //  ":minvaga" => $turma->getMinvaga()

             );

             $res = $this->pdo->ExecuteNonQuery($sql, $param);
             $this->setLastId($this->pdo->GetLastId());

             return $res;

         } catch (PDOException $ex) {
             if ($this->debug) {
                 echo "ERRO: {$ex->getMessage()} LINE: {$ex->getLine()}";

             }
             return false;
         }
    }
    public function getLastId(){
       	 	return $this->lastid;
    }
    public function setLastId($id){
        	$this->lastid = $id;
    }
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu coloquei o arquivo que você fez na Model

class Turma {

	private $lastid;
    
	function getLastId(){
            return $this->lastid;
    }
    function setLastId($id){
            $this->lastid = $id;
    }
}

Junto com as outras, parou de dar erros mas não tive nenhuma mensagem.

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.