Fechando ou Reutilizando conexão com Mysql usando PDO - PHP

29/02/2016

Bom, meu script estava funcionando perfeitamente até eu colocar ele online, bastou alguns minutos de sossego e tranquilidade para o erro apareccer.

"parecia bom demais pra ser verdade".

O problema agora é o seguinte, toda vez que eu tento executar um código meu me retorna este erro.

SQLSTATE[42000] [1226] User 'u968736533_doshe' has exceeded the 'max_user_connections' resource (current value: 3)


Isso acontece porque toda vez que faço alguma coisa com meu banco de dados eu utilizo uma função que criei para se conectar ao banco de dados.

segue o código da função.

function conexao(){

	$var = array('host' => HOST,'usuario' => USER,'senha' => PASSWORD,'dbname' => BD,);

	$opcoes = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8');
	
	try {
		@$con = new PDO("mysql:host=".$var['host'].";dbname=".$var['dbname'],$var['usuario'],$var['senha'], $opcoes);
		return $con;
	} catch(PDOException $e){
		echo $e->getMessage();
		die();
	}

}


Bom, para utilizar a função eu faço da seguinte forma.

conexao()->prepare($sql);


Mas agora eu estou na dúvida de como encerrar essa conexão ou mesmo como reaproveitar a mesma uma vez aberta, para que não haja várias conexões abertas de uma vez.
Alguém com uma ideia para ajudar?

Cleyton Caetano

Respostas

29/02/2016

Din

Bom pelo que estou vendo, você deve ter um CRUD, põe um evento destrutor na sua classe, e fecha a conexão com o banco de dados.
Responder Citar

29/02/2016

Cleyton Caetano

Bom pelo que estou vendo, você deve ter um CRUD, põe um evento destrutor na sua classe, e fecha a conexão com o banco de dados.

Ainda estou perdido sobre o que fazer com meu código! Todos os métodos de destruição que utilizei e pesquisei na internet não funcionaram!
Responder Citar

29/02/2016

William (devwilliam)

Tenta implementar a conexão no padrão singleton http://www.devwilliam.com.br/php/pdo-conexao-seguindo-singleton-php.
Responder Citar

29/02/2016

Cleyton Caetano

Tenta implementar a conexão no padrão singleton http://www.devwilliam.com.br/php/pdo-conexao-seguindo-singleton-php.


Interessante seu código!

deixa eu entender, sua classe funcionaria com minhas funções normalmente? pelo que retorno a conexão PDO com a função conexao() para outras funções como InsertBD e UpdateBD, se eu fizer assim terei um resultado true no final das contas?

//usando seu código
$conexao = new Conexao ();

//usando na minha funcao
$conexao->prepare($sql);
Responder Citar

29/02/2016

William (devwilliam)

 /* Require no script contendo a classe */  
 require_once 'conexao.php'; 
 
 /* Variável recebendo instância do objeto PDO */  
 $pdo = Conexao::getInstance();  

$pdo->prepare($sql);
Responder Citar

29/02/2016

Cleyton Caetano

 /* Require no script contendo a classe */  
 require_once 'conexao.php'; 
 
 /* Variável recebendo instância do objeto PDO */  
 $pdo = Conexao::getInstance();  

$pdo->prepare($sql);


Entendi, vou reescrever meu código e volto a postar aqui o resultado!
Responder Citar