Persistente Verbindungen funktionieren nicht mit dem mysqli-Treiber in codeIgniter

Ich habe diese DB-Konfiguration in meiner lokalen Entwicklungsumgebung

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

Wenn ich das auf einen Produktionsserver übertrage, funktioniert es nicht, deshalb habe ich viele Dinge ausprobiert, aber eine Sache, dieseemed to work war, den dbdriver zu ändernMysqli anstelle von MySQL. Aber ich musste auch db_debug auf FALSE setzen (also "funktionierte" es nicht die richtige Aussage)

Ich habe viel darüber gelesen, aber ich habe nirgendwo eine Antwort darauf gefunden. (Ich bin nicht zufrieden mit: "Wechsle zu debug = false und es würde funktionieren")

Ich wollte sehen, was das eigentliche Problem ist, also habe ich den lokalen Server ebenfalls auf den mysqli-Treiber umgestellt und dann den Fehler erhalten:

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

Nach einigem Graben sehe ich, dass db_connect () und db_pconnect () genau auf die gleiche Weise funktionieren:

Wenn Sie in der Datei system / database / drivers / mysqli / mysqli_driver.php nachsehen, sieht es so ausconnect() undpconnect() arbeiten genau so, weilpconnect() ruft nur anconnect() Funktion.

damit$db['default']['pconnect'] = TRUE; ist völlig nutzlos, wenn Sie den mysqli-Treiber verwenden.

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();
}

Bei näherer Betrachtung von db_connect () und db_pconnect () werden Fehler unterdrückt. Ich habe das @ für den Rückgabewert entfernt und dann folgendes erhalten:

Schweregrad: Warnung

Nachricht: mysqli_connect (): (08004/1040): Zu viele Verbindungen

Dateiname: mysqli / mysqli_driver.php

Zeilennummer: 76

Das ist ein weitaus erklärender Fehler

Meiner Meinung nach sollte db_pconnect für den mysqli-Treiber ungefähr so aussehen:

function db_pconnect()
    {       
                 $this->hostname = 'p:' . ltrim($this->hostname, 'p:');                                  
                 return $this->db_connect();
    }

Ist dies ein völliger Fehler des CodeIgniter-Entwicklungsteams oder fehlt mir etwas?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage