PHP mysqli повторно подключить проблему

У меня возникли проблемы с использованием класса mysqli в PHP, и я не смог найти ответ нигде.

В моем сценарии класс создает соединение mysqli, которое он использует во всех своих функциях. Впоследствии этот скрипт вилки. Соединение также используется детьми, но я столкнулся с проблемой закрытия соединения (MYSQL Server Has Gone Away) у родителя, когда дети умирают.

Прежде чем переключиться на 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 } 

вы можете попробовать что-то немного другое .. вместо 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 ….