У меня возникли проблемы с использованием класса mysqli в PHP, и я не смог найти ответ нигде.PHP mysqli reconnect проблема
В моем сценарии класс создает соединение 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.
Любые предложения?
Это сработало. Я не понимал, что вы не можете использовать ini_set для изменения этой переменной, и я являюсь гением, я добавил строку в php.ini раньше, не зная, что уже существует строка mysli.reconnect = Off дальше вниз файл. Но удаление этого и просто использование mysqli.reconnect работало и делало mysqli-> ping() так же, как mysql_ping. Спасибо за помощь! –