Постоянные соединения не работают с драйвером mysqli в codeIgniter
У меня есть эта db-конфигурация в моей локальной среде разработки
$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;
Когда я перехожу к этому на рабочий сервер, он не работает, поэтому я попробовал много вещей, но одна вещь, котораяseemed to work
должен был изменить DBDriver наMySQLi вместо mysql. Но я также должен был поставить db_debug в FALSE (так что это «сработало» не будет правильным утверждением)
Я много об этом читал, но нигде не нашел ответа на это. (Меня не устраивает: «Измените на debug = false, и это сработает»)
Я хотел посмотреть, в чем же заключается проблема, поэтому я изменил локальный сервер на драйвер mysqli, а затем получил ошибку:
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
После некоторых копаний я вижу, что db_connect () и db_pconnect () работают точно так же:
Если вы посмотрите в систему / база данных / drivers / mysqli / mysqli_driver.php - похоже,connect()
а такжеpconnect()
работают точно так же, потому чтоpconnect()
просто звонитconnect()
функция.так$db['default']['pconnect'] = TRUE;
совершенно бесполезно при использовании драйвера 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();
}
При более внимательном рассмотрении описанных выше db_connect () и db_pconnect () - ошибки исключаются. Я удалил @ для возвращаемого значения, а затем получил это:
Серьезность: Предупреждение
Сообщение: mysqli_connect (): (08004/1040): слишком много соединений
Имя файла: mysqli / mysqli_driver.php
Номер строки: 76
что намного более объяснительная ошибка
поэтому я подумал, что db_pconnect для драйвера mysqli должен выглядеть примерно так:
function db_pconnect()
{
$this->hostname = 'p:' . ltrim($this->hostname, 'p:');
return $this->db_connect();
}
Это полная ошибка команды разработчиков CodeIgniter или я что-то упустил?