Ir para conteúdo

Arquivado

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

Fabyo

Classe de conexao com MySQLi

Recommended Posts

Classe de conexao com mysqli

 

Classe pra conectar com o banco de dados mysql usando nova versao das funções do mysql a dll mysqli (php5)

 

class_connect.php

PHP
  1. php
  2. ###########################
  3. #                                                      #
  4. #Fabyo Guimaraes 20/02/2005            #
  5. #demostração de classe para conexao #
  6. #usando o mysqli                              #
  7. #########################

  8. class Conexao
  9. {
  10. var $host    = "servidor";
  11. var $usuario = "usuario";
  12. var $senha = "senha";
  13. var $banco = "banco";
  14. private $mysqli;

  15. public function Abrir()
  16. {
  17.   $this->mysqli = new mysqli($this->host, $this->usuario, $this->senha, $this->banco);
  18. }
  19.  
  20. public function Fechar()
  21. {
  22.   $this->mysqli->close();
  23. }
  24. }

  25. class Comando
  26. {
  27. public function Executar($sql)
  28. {
  29.   $con = new Conexao();
  30.   $con->Abrir(); 
  31.   $re = $con->mysqli->query($sql);
  32.   $con->Fechar();
  33.   return $re;
  34. }
  35. }
  36. ?>

 

modo de usar:

PHP


  1. include "class_connect.php";

  2. $re = Comando::Executar("Select * from tabela");

  3. while ($obj = $re->fetch_object()) {

  4. echo $obj->campo;

  5. }

  6. obs: só passar a sintaxe sql e a conexao abre e fecha e executa a query

  7. ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, muiiito obrigado, seu post foi essencial para mim .. eu estava apanhando muito para executar sp no mysql ..com seu exemplo casou certinhoparabensso uma pergunta, na pagina que faz a chamada se eu quiser executar uma query do tipo mysql_num_rowspara saber a quantidade de registros, como posso implementar ??pois tentei algumas coisas e ele só aceita feth_object..valew

Compartilhar este post


Link para o post
Compartilhar em outros sites

muito boa o script que você colocou.estava com duvidas com respeito a como trabalhar com class.mas fiquei com uma duvida.na linha 19 do metodo abrir()eu n consegui entender pq a logica quando você diz que a variavel mysqli é um novo mysqli.e na linha 34 quando você diz que a variavel é uma query();no caso a função mysqli so pode ser usado em class ou a função mysql() tb pode ser usada em class?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao na linha 18 estou estanciando a classe mysqli

é que a classe mysqli ja existe no php e ela é super completa entao basta extende-la para usar ou estancia-la

 

veja mais detalhes:

 

http://www.php.net/mysqli

 

e na linha 34 é um metodo da classe, recomendo estudar um pouco sobre oop senao voce nao vai conseguir entender direito

 

http://www.php.net/oop

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mano, isso é tudo que preciso!!! mas quando fui testar ak na maquina, deu esse erro:Fatal error: Cannot access private property Conexao::$mysqli in C:\wamp\www\objeto mysqli\class_connect.php on line 27Teria uma dica para me passar?valeu pela ajuda mano!Grande abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

vou postar um exemplo simples, é que eu to pra postar um sistema feito em oop, mas ainda nao tive tempo de termina-lo

 

aqui eu coloquei tudo numa pagina só mas recomendo voce separar em arquivos

 

<?php
/*Use num arquivo de configurações 
por exemplo config.php
*/
define("SERVIDOR", "localhost");
define("USUARIO", "root");
define("SENHA", "");
define("BANCO", "banco");
/*Use num arquivo de configurações 
por exemplo config.php
*/

#classe de conexão Mysqli
class DB extends Mysqli
{
private $db_config		= array();
private static $status	= false;
private static $conectado = false;
private $mysqli;

public function __construct()
{				
	$this->db_config[0] = defined("SERVIDOR") ? SERVIDOR : "";
	$this->db_config[1] = defined("USUARIO")  ? USUARIO  : "";
	$this->db_config[2] = defined("SENHA")	? SENHA	: "";
	$this->db_config[3] = defined("BANCO")	? BANCO	: "";

	if(is_array($this->db_config) or !in_array("", $this->db_config))
	{
		self::$status = true;// aqui é para dizer que aparentemente os dados de conexao estao ok.	
		@parent::__construct(
			$this->db_config[0], 
			$this->db_config[1], 
			$this->db_config[2], 
			$this->db_config[3]
		);	

		if(!mysqli_connect_errno())
		{
			self::$conectado = true;//aqui é para dizer se a conexao ta aberta
			return true;
		}
	}	
}

public function __destruct() 
{
   	$this->Fechar();
}	

public function Fechar() 
{
	if(self::$conectado)//se tiver conectado fecha
	{
		parent::close();
		self::$conectado = false;//seta para status da conexao = false
	}	
}

public function Executar($sql)
{
	if(self::$conectado)// só executa a query se a conexao foi bem sucedida
	{
		if ($re = parent::query($sql))
		{
			return $re;
/* teste simples e retorna o resultado da conexao, nao recomendo trabalhar assim
em vez disso voce pode tratar melhor as execuções e retorno da query, isso que ue mostrei foi só um exemplo
*/	
		}		
	}	
}
}

/* Use num arquivo separado por exemplo singleton.php
e adicione ele com require_once*/

#classe singleton e factory de objetos
final class Singleton
{
private static $instance = array();

final private function __construct()
{}

public final function __clone()
{
	trigger_error('Nao é possivel clonar uma classe singleton', E_USER_ERROR);
}

static public function &factory($className)
{
	if(!isset(self::$instance[$className]))
	{
		self::$instance[$className] = new $className;
	}
	return self::$instance[$className];
}
}

$classe =& Singleton::factory( "DB" );// cria a estancia de 1 objeto de conexao DB
$re = $classe->Executar("select * from tabela");// passa o select do banco
/* aqui eu nao fiz nenhuma validação mas recomendo testar antes se a $re esta correta e sem erros
*/
while ($l = $re->fetch_array(MYSQLI_ASSOC))
{
echo $l["campo"]."<br />";	   
}
#fecho a conexao com o banco
$classe->Fechar();
?>

 

dica viu alguma função e nao entende pra que serve?, digite http://www.php.net/nome_dafuncao

qualquer duvida só postar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fabyo,

 

eu não ententi muito bem como funciona akela classe Singleton q você criou.

para que exatamente ela serve?

Compartilhar este post


Link para o post
Compartilhar em outros sites

ah tah..

agora eu entendi o pq de usar o singleton.

 

porém não funcionou o exemplo..

 

creio que o erro está aki:

self::$instance[$className] = new $className;

eu colockei a classe DB num arquivo config. php

e a classe singleton num arquivo chamado singleton.class.php

 

ai na página eu do um require_once em cada um..

porém não apresenta nenhum erro.. fui fazendo testes e vi que o q provavelmente não funcionou foi essa parte do código aí.

 

o que será q eu fiz de errado?

 

obs: criei uma classe teste dentro do arquivo singleton.class.php aí nakela linha do código instanciei a classe teste, e funcionou.. tentei dar um require-once no arquivo config.php, porém continuou não funcionando ocm a classe DB.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Madrugada Pessoal,

 

Fabyo tenho uma dúvida bem iniciante, não consegui compreender a condição exposta nessa parte!

 

$this->db_config[0] = defined("SERVIDOR") ? SERVIDOR : "";

 

Se você ou algum outro membro poder me dar uma força para compreender a condição do "?" e ":" eu agradeço!

 

Boa madruga a todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Outra coisa que pode não somar em nada usualmente, mais para os iniciantes terem mais uma referência de algum possível mal funcionamento adicionei mais umas linhas no código!

 

A impressão de uma mensagem de erro caso haja uma falha de conexão com o banco de dados!

 

if(!mysqli_connect_errno()) {
				self::$conectado = true;
				return true;
			} else {
				printf("Falha na Conexão Com o Banco de Dados!");
				exit();
			}

T+

Compartilhar este post


Link para o post
Compartilhar em outros sites

é apenas um if

 

por exemplo

 

$var = condição ? faça isso : faça akilo

se se não

 

é mais ou menos isso

 

Boa Madrugada Pessoal,

 

Fabyo tenho uma dúvida bem iniciante, não consegui compreender a condição exposta nessa parte!

 

$this->db_config[0] = defined("SERVIDOR") ? SERVIDOR : "";

 

Se você ou algum outro membro poder me dar uma força para compreender a condição do "?" e ":" eu agradeço!

 

Boa madruga a todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

É um if ternario

 

http://php.net/manual/en/language.operators.comparison.php

 

$var = condição ? "resultado1" : "resultado2";

 

mesma coisa que:

 

if(condição ){

$var = "resultado1";

} else {

$var = "resultado2";

}

 

só lembrando que o ternario é para condições simples, se caso precise fazer algo mais com a condição use o modo normal do if

Compartilhar este post


Link para o post
Compartilhar em outros sites

pessoal,

 

com bases nos exemplos apresentado e nos meus estudo,

criei uma classe de conexão utilizando a extensão mysqli.

Quem se interessar, está aí

Classe de Conexão PHP MySQL

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito bom o script mas me surgiram umas duvidas (estou começando agora a programar pra valer orientado a objeto :wacko: ),

 

1) Quando usamos o padrão singleton o construtor da classe conexão não deveria ser private ? pq senão eu poderia instanciar essa classe a qualquer momento passando por cima do padrão de projeto.

 

2) Por essa classe ter o destruct não teriamos que instanciar essa classe toda vez que precisarmos utiliza-la?

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.