Ir para conteúdo

POWERED BY:

Arquivado

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

Fabyo

Classe de Conexao PHP 5

Recommended Posts

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

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 9

A linha 9 é linha do while.

 

você sabe oq pode estar ocorrendo???

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

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

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

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

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
  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

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
  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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.