Conexões persistentes não funcionam com o driver mysqli no codeIgniter
Eu tenho essa configuração db no meu ambiente de desenvolvimento local
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = ''; //Actual username is put inside these quotes
$db['default']['password'] = '';
$db['default']['database'] = ''; //Actual name of database is put inside quotes
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = APPPATH .'cache';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
Quando transfiro isso para um servidor de produção, ele não funciona, então tentei muitas coisas, mas uma coisa queseemed to work
foi mudar o dbdriver paramysqli em vez do mysql. Mas eu também tenho que colocar db_debug em FALSE (para que "funcionasse" não seria a declaração correta)
Eu li muito sobre isso, mas não encontrei uma resposta para isso em nenhum lugar. (Não estou satisfeito com: "Altere para debug = false e funcionaria")
Eu queria ver qual era o problema real, então mudei o servidor local para o driver mysqli e recebi o erro:
A Database Error Occurred
Unable to connect to your database server using the provided settings.
Filename: C:\Program Files\wamp\www\mellomgarden2\system\database\DB_driver.php
Line Number: 124
Após algumas pesquisas, vejo que db_connect () e db_pconnect () estão funcionando exatamente da mesma maneira:
Se você procurar no sistema / banco de dados / drivers / mysqli / mysqli_driver.php - parece queconnect()
epconnect()
estão trabalhando exatamente da mesma maneira, porquepconnect()
está apenas chamandoconnect()
função.tão$db['default']['pconnect'] = TRUE;
é totalmente inútil ao usar o driver mysqli.
function db_connect()
{
if ($this->port != '')
{
return @mysqli_connect($this->hostname, $this->username, $this->password, $this->database, $this->port);
}
else
{
return @mysqli_connect($this->hostname, $this->username, $this->password, $this->database);
}
}
// --------------------------------------------------------------------
/**
* Persistent database connection
*
* @access private called by the base class
* @return resource
*/
function db_pconnect()
{
return $this->db_connect();
}
Examinando de perto os db_connect () e db_pconnect () acima, os erros são suprimidos. Eu removi o @ para o valor de retorno e obtive o seguinte:
Gravidade: Aviso
Mensagem: mysqli_connect (): (08004/1040): Muitas conexões
Nome do arquivo: mysqli / mysqli_driver.php
Número da linha: 76
que é um erro MUITO mais explicativo
então meu pensamento é que o driver db_pconnect for mysqli deve ser algo como isto:
function db_pconnect()
{
$this->hostname = 'p:' . ltrim($this->hostname, 'p:');
return $this->db_connect();
}
Isso é uma falta total da equipe de desenvolvimento do CodeIgniter ou estou perdendo alguma coisa?