gedmilson 5 Denunciar post Postado Janeiro 8, 2018 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
BrunoBit 82 Denunciar post Postado Janeiro 9, 2018 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
gedmilson 5 Denunciar post Postado Janeiro 9, 2018 Não sei como fazer isso??? Compartilhar este post Link para o post Compartilhar em outros sites
BrunoBit 82 Denunciar post Postado Janeiro 9, 2018 // 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
gedmilson 5 Denunciar post Postado Janeiro 9, 2018 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
gedmilson 5 Denunciar post Postado Janeiro 9, 2018 Desculpe minha ignorância! mas estou começando agora a trabalhar com orientação a objetos. Compartilhar este post Link para o post Compartilhar em outros sites
BrunoBit 82 Denunciar post Postado Janeiro 9, 2018 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
gedmilson 5 Denunciar post Postado Janeiro 9, 2018 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
BrunoBit 82 Denunciar post Postado Janeiro 9, 2018 Dando require_once em CategoriaController.php você consegue chamar a classe onde está o método Cadastrar()? Compartilhar este post Link para o post Compartilhar em outros sites
gedmilson 5 Denunciar post Postado Janeiro 9, 2018 Tentei fazer dessa forma. print_r($turmaController->getLastId()); mas parece que não deu certo Compartilhar este post Link para o post Compartilhar em outros sites
BrunoBit 82 Denunciar post Postado Janeiro 9, 2018 Retornou algum erro? Compartilhar este post Link para o post Compartilhar em outros sites
gedmilson 5 Denunciar post Postado Janeiro 9, 2018 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
BrunoBit 82 Denunciar post Postado Janeiro 9, 2018 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
gedmilson 5 Denunciar post Postado Janeiro 9, 2018 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
BrunoBit 82 Denunciar post Postado Janeiro 9, 2018 Poem o seu código do Banco.php aqui também pra eu dar uma olhada, retira a senha, o nome do banco e o nome do usuário. Compartilhar este post Link para o post Compartilhar em outros sites
gedmilson 5 Denunciar post Postado Janeiro 9, 2018 <?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
BrunoBit 82 Denunciar post Postado Janeiro 9, 2018 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
gedmilson 5 Denunciar post Postado Janeiro 9, 2018 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
BrunoBit 82 Denunciar post Postado Janeiro 9, 2018 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
gedmilson 5 Denunciar post Postado Janeiro 9, 2018 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