Fabyo 66 Denunciar post Postado Janeiro 10, 2006 Exemplo de uma classe de conexao usando MySQLI e arquivo de configuração separado e debugger config.php: <?php define("SERVIDOR", "localhost"); define("USUARIO", "usuario"); define("SENHA", "senha"); define("BANCO", "banco"); ?> index.php: <?php include "config.php"; include "conexao.class.php"; $comando = new DBMySQLi(); $re = $comando->Executar("select * from tabela"); while($obj = $re->fetch_object()) { echo $obj->campo; } ?> conexao.class.php: <?php Class DBMySQLi extends Mysqli { public function __construct() { try { @$this->connect( SERVIDOR, USUARIO, SENHA, BANCO ); if(mysqli_connect_errno() != 0) { throw new Exception(mysqli_connect_errno()); } } catch(Exception $erro) { $mensagem = $erro->getMessage(); $codigo = $erro->getCode(); $arquivo = $erro->getFile(); $trace = $erro->getTraceAsString(); $dir = getcwd()."\\logs\\"; if(!file_exists($dir)) { mkdir($dir); } error_log(date("Y-m-d H:i:s")."|$mensagem|$codigo|$arquivo|$trace\r\n\r\n", 3, $dir."debugger.log"); exit; } } public function __destruct() { if(mysqli_connect_errno() == 0) { $this->close(); } } public function Executar($SQL) { $resultado = $this->query($SQL); if(preg_match("#(select)#is", $SQL)) { return $resultado->fetch_object(); } else { return $this->affected_rows; } } } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Marcelo Micheletti 0 Denunciar post Postado Setembro 14, 2006 Fabyo, parabéns pelos seus scripts, sempre simples e fácil de usar. Neste eu tive um problema e gostaria de pedir a sua ajuda pois não consegui entender oq ocorreu. Ao executar o script apareceu a seguinte mensagem de erro: Citar Fatal error: Call to undefined method stdClass::fetch_object() in /home/mergulho/public_html/novo/teste.php on line 9A linha 9 é linha do while. você sabe oq pode estar ocorrendo??? Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
_Jean_ 0 Denunciar post Postado Setembro 22, 2006 também tive o mesmo problema, mas resolveu mudando essa linha na classe: return $resultado->fetch_object(); para return $resultado; Pois na página já fazia o fetch_object(); acho que é isso. Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Setembro 22, 2006 é isso mesmo no lugar de retornar o return $resultado->fetch_object(); você pode retornar o objeto completo assim você faz o que quiser depois return $resultado; Compartilhar este post Link para o post Compartilhar em outros sites
Ricardo.RFS 0 Denunciar post Postado Setembro 27, 2006 Qual a vantagem de utiliza este metodo de conexão?Abrçs e parabéns Compartilhar este post Link para o post Compartilhar em outros sites
Carlos Vital 0 Denunciar post Postado Janeiro 31, 2007 Uma duvida! eu preciso de uma classe chamada Mysqli para essa poder funcionar? pois pelo que vi essa classe tem um extends Mysqli. Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Janeiro 31, 2007 nao, essa classe é interna do PHP5 Compartilhar este post Link para o post Compartilhar em outros sites
SAW 0 Denunciar post Postado Março 13, 2007 Excelente tópico, parabénsmuito esclarecedor, principalmente pra pessoas como eu, que conhece pouco a linguagem(PHP)mas com a lógica de orientação à objetos.Continue assim Compartilhar este post Link para o post Compartilhar em outros sites
Falberto 0 Denunciar post Postado Julho 29, 2007 gostei da class, agora segue uma dúvida;fui fazer um teste colocando um comando de sql errado, exemploselect * from medico;sendo que no banco não tenho a tabela médio, ele retorna um erro muito generico, tem como contrar o erro que retornou? derepente uma função igual a mysql_error();?retornou esse erro:Fatal error: Call to a member function fetch_object() on a non-object in C:\Arquivos de programas\VertrigoServ\www\novo_sms\include\class\teste.php on line 9 Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Julho 29, 2007 Nessecaso, basta verificar se a propriedade errno da classe mysqli contém o valor zero. Se for zero, não houve erro, e o resultado da consulta pode serretornado. Se for diferente de zero, houve erro. Por exemplo: public function Executar($SQL) { $resultado = $this->query($SQL); if ($this->errno != 0) { //houve erro. É posssível tratar esse erro com Exceções. $this->error contém a mensagem de erro e $this->errno, o número do erro return false; } if(preg_match("#(select)#is", $SQL)) { return $resultado->fetch_object(); } else { return $this->affected_rows; } } A função is_object() também é útil nessecaso, para verificar se uma variável é instância de um objeto. Abraços, Beraldo Compartilhar este post Link para o post Compartilhar em outros sites
Pats 0 Denunciar post Postado Janeiro 17, 2008 Gente, eu sei que eu dei uma ressuscitada neste post, mas preciso de uma ajuda. Estou começando a usar classes, etc.. e encontrei uma dificuldade na hora de usar esta pra fazer a consulta SQL. Se eu coloco LEFT JOIN no SELECT, na hora de chamar a função Executar... ele dá erro : (Fatal error: Call to a member function fetch_object() on a non-object...) É assim mesmo ou estou errando algo? CODE $re = $this->Executar("SELECT * FROM sisnot_noticias WHERE categoria IN ($sec) AS not LEFT JOIN sisnot_categorias AS cat ON (not.categoria = cat.nome) ORDER BY data DESC $pag "); Obrigada pela ajuda! Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Janeiro 18, 2008 o problema é na SQL, não na classe. Left Join deve vir antes de Where. Você pode usar $MySQLi->error para ver qual é o erro retornado pelo MySQL. OBS: $MySQLi deve ser trocado pela instância da classe. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Pats 0 Denunciar post Postado Janeiro 18, 2008 Beraldo disse: o problema é na SQL, não na classe. Left Join deve vir antes de Where. Você pode usar $MySQLi->error para ver qual é o erro retornado pelo MySQL. OBS: $MySQLi deve ser trocado pela instância da classe. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Olá! Obrigadão pela força! Realmente era a SQL...colocando pra imprimir o erro foi fácil descobrir o problema (além do WHERE no lugar errado...hehe) que era o nome not que eu dei pra uma das tabelas...ele entendia como not=não... Que coisa, né! Mais uma vez, sou muito grata pelo apoio! É realmente muito importante pra quem está começando... :D Compartilhar este post Link para o post Compartilhar em outros sites
[ GuTo ] 0 Denunciar post Postado Agosto 10, 2009 Fatal error: Class 'Mysqli' not found in C:\Inetpub\wwwroot\teste.php on line 7 Por acaso, essa classe pode não ter no windows ou ter q habilitar em alguma configuração? to usando o PHP Version 5.2.9-2 Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Agosto 10, 2009 tem que habilitar a extensão mysqli, no php.ini. Compartilhar este post Link para o post Compartilhar em outros sites
brunohass 0 Denunciar post Postado Setembro 7, 2009 Alguem teria a função de inserir desta classe? Aguardo Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Setembro 7, 2009 basta usar o comando INSERT normalmente. Compartilhar este post Link para o post Compartilhar em outros sites
brunohass 0 Denunciar post Postado Setembro 7, 2009 Em 07/09/2009 at 19:28, 'Beraldo' disse: basta usar o comando INSERT normalmente. Sempre programei php sem orientação a objeto, ate usei já funçoes prontas em alguns sites porem não estou conseguindo e tenho certeza que estou cometendo algum erro basico. Se puderes me ajudar veja o codigo abaixo. <?php include "classMysql.php"; $comando = new DBMySQLi(); $re = $comando->Executar("INSERT * FROM teste (nome) VALUE ('Inserindo');"); ?> Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Setembro 7, 2009 Você está errando a sintaxe da SQL. Estude SQL INSERT INTO tabela (campos) VALUES (valores); Compartilhar este post Link para o post Compartilhar em outros sites
brunohass 0 Denunciar post Postado Setembro 7, 2009 MUITOOO HILARIOOOOOOO Bah cara este meu erro é completamente HILARIO kkkk. Bah mas me tira 1 duvida ai como faço o tratamento caso de algum erro na inserção. Compartilhar este post Link para o post Compartilhar em outros sites