rpmarques 3 Denunciar post Postado Julho 28, 2016 Buenas, estou migrando os meu "pojetos" de mysql_* para PDO, e me deparei com os begins e commits, minha dúvida é a seguinte, deste modo ele vai fazer o commit "bunitasso"?? Código da Classe: <?php class Bairro { // Atributo para conexão com o banco de dados private $pdo = null; // Atributo estático para instância da própria classe private static $bairros = null; private function __construct($conexao) { $this->pdo = $conexao; } public static function getInstance($conexao) { if (!isset(self::$bairros)): self::$bairros = new Bairro($conexao); endif; return self::$bairros; } public function insert($rNome) { try { $this->pdo->beginTransaction(); $rSql = "INSERT INTO bairros (nome,data_cad) VALUES (:nome,:data_cad)"; $stm = $this->pdo->prepare($rSql); $stm->bindValue(':nome', $rNome); $stm->bindValue(':data_cad', date('Y-m-d')); $stm->execute(); if ($stm) { $this->pdo->commit(); Logger('Usuario:[' . LOGIN . '] - Inseriu bairro'); } return $stm; } catch (PDOException $erro) { $this->pdo->rollBack(); Logger('Usuario:[' . LOGIN . '] - Erro na linha:' . $erro->getLine() . ' - Mensagem:' . $erro->getMessage()); } } Código da Classe Conexão: <?php DEFINE('USER', 'root'); DEFINE('PASSWORD', 'root'); DEFINE('HOST', 'localhost'); DEFINE('DBNAME', 'imo'); DEFINE('CHARSET', 'utf8'); class Conexao { //Atributo estático para instância do PDO private static $pdo; // Escondendo o construtor da classe private function __construct() { // } public static function getInstance() { if (!isset(self::$pdo)) { try { $opcoes = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8', PDO::ATTR_PERSISTENT => TRUE); self::$pdo = new PDO("mysql:host=" . HOST . "; dbname=" . DBNAME . "; charset=" . CHARSET . ";", USER, PASSWORD, $opcoes); self::$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { print "Erro: " . $e->getMessage(); } } return self::$pdo; } } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Julho 29, 2016 O código é funcional, eu apenas trataria três situações. 1 - Com controle de exceções, não é necessário validar a execução, logo o if abaixo é desnecessário: if ($stm) { 2 - Em teoria, insert não deve retornar nada. Somente inserir ou, em caso de erro, lançar uma exceção. Logo, acho o return $stmt desnecessário; 3 - Utilize registre ao invés de singleton. Compartilhar este post Link para o post Compartilhar em outros sites
rpmarques 3 Denunciar post Postado Agosto 1, 2016 Pois é, eu preciso deste if pois dependendo do retorno eu digo pro usuário se deu certo ou não. Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Agosto 1, 2016 Não consigo encontrar fundamentos para isso. Dessa forma, mantenho a minha indagação. Se falhar, não vai nem chegar ao if, gerará uma exception. O if apenas valida a variável (se não é null) e não a sua execução. Já o retorno, bem, depende. Por questão de coesão, um insert apenas deve inserir e não retornar. No link abaixo, você pode ver exemplos/explicação sobre o caso. http://forum.imasters.com.br/topic/551113-duvida-em-quando-usar-throw-ou-retornar-false/ Compartilhar este post Link para o post Compartilhar em outros sites