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?

questionAnswers(1)

yourAnswerToTheQuestion