Ответ 1
В документе mysqli_ping()
указано, что если вы установите глобальный параметр mysqli.reconnect на 1 (в вашем php.ini), то mysqli_ping()
снова подключится, когда обнаружит, что соединение ушло.
У меня возникли проблемы с использованием класса mysqli в PHP, и я нигде не смог найти ответ.
В моем script класс создает соединение mysqli, которое он использует во всех функциях. Затем эти вилки script. Соединение также используется детьми, но я столкнулся с проблемой закрытия соединения (сервер MYSQL ушел) в родительском доме, когда дети умирают.
Прежде чем переключиться на mysqli (просто использовал mysql), я просто вызвал mysql_ping, чтобы убедиться, что соединение db было там до выполнения запроса в родительском процессе. Mysqli имеет аналогичную функцию ping, но на самом деле она не пересоединяется, если соединение отсутствует. Я попытался использовать глобальную настройку mysqli.reconnect = ON без везения (используя php.ini и ini_set).
Функция php mysql_connect позволяет вам захватить уже существующее соединение, поэтому, если бы я использовал mysql вместо mysqli, я мог бы просто повторно использовать соединение в дочернем элементе сразу после процесса forked. НО mysqli, похоже, не имеет такой функциональности...
Единственное, что мне удалось сделать, это вызвать mysqli- > ping(), и если это вернет false, то снова подключитесь к базе данных в родительском. Это ужасно неэффективно, и я бы гораздо лучше понял, как правильно это сделать с помощью mysqli (и без необходимости ручных повторных подключений), которые должны вернуться к mysql..
Любые предложения?
В документе mysqli_ping()
указано, что если вы установите глобальный параметр mysqli.reconnect на 1 (в вашем php.ini), то mysqli_ping()
снова подключится, когда обнаружит, что соединение ушло.
function IsConnected() {
if (empty($this->_connectionID) === FALSE && mysqli_ping($this->_connectionID) === TRUE) {
return true; // still have connect
}
$this->_connectionID = false;
return false; // lose connection
}
u может попробовать что-то немного другое.. вместо ping.. попробуйте послать действительно простой запрос низкой интенсивности, например "select now()" и посмотреть, есть ли у вас лучшие результаты.
Не можете ли вы использовать постоянные соединения? Кроме того, действительно ли необходимо fork()?
Используйте http://www.php.net/manual/en/mysqli.real-connect.php... переустановите php и проверьте настройки php.ini
Мне кажется, вам нужно установить mysqli.reconnect в my.cng, который является конфигурацией mysql, а не php.ini, мне не удалось изменить соединение повторно через ini_set, но мой sys администратор сделал это в my.cnf.
Итак, немного запутался, что другие сделали это в php.ini....