Подтвердить что ты не робот

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

У меня возникли проблемы с использованием класса 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..

Любые предложения?

4b9b3361

Ответ 1

В документе mysqli_ping() указано, что если вы установите глобальный параметр mysqli.reconnect на 1 (в вашем php.ini), то mysqli_ping() снова подключится, когда обнаружит, что соединение ушло.

Ответ 2

function IsConnected() {
    if (empty($this->_connectionID) === FALSE && mysqli_ping($this->_connectionID) === TRUE) {
        return true; // still have connect
    }
    $this->_connectionID = false;
    return false; // lose connection
}

Ответ 3

u может попробовать что-то немного другое.. вместо ping.. попробуйте послать действительно простой запрос низкой интенсивности, например "select now()" и посмотреть, есть ли у вас лучшие результаты.

Ответ 4

Не можете ли вы использовать постоянные соединения? Кроме того, действительно ли необходимо fork()?

Ответ 6

Мне кажется, вам нужно установить mysqli.reconnect в my.cng, который является конфигурацией mysql, а не php.ini, мне не удалось изменить соединение повторно через ini_set, но мой sys администратор сделал это в my.cnf.

Итак, немного запутался, что другие сделали это в php.ini....