Mam problemy z używaniem klasy mysqli w PHP i nie byłem w stanie znaleźć odpowiedzi w dowolnym miejscu.PHP mysqli reconnect problem
W moim skrypcie klasa tworzy połączenie mysqli, którego używa w swoich funkcjach. Potem ten skrypt się rozwidla. Połączenie jest również używane przez dzieci, ale mam problem z zamknięciem połączenia (serwer MYSQL przeminął) u rodzica, gdy dzieci umierają.
Zanim przełączyłem się na mysqli (korzystałem tylko z mysql) po prostu zadzwoniłem do mysql_ping, aby upewnić się, że połączenie db było tam przed wykonaniem zapytania w procesie nadrzędnym. Mysqli ma podobną funkcję pingowania, ALE w rzeczywistości nie łączy się ponownie, jeśli połączenie nie istnieje. Próbowałem używać globalnego ustawienia mysqli.reconnect = ON bez powodzenia (używając php.ini i ini_set).
Funkcja php mysql_connect pozwala na pobranie istniejącego połączenia, więc gdybym używał mysql zamiast mysqli, mógłbym po prostu ponownie użyć połączenia z dzieckiem zaraz po rozwidleniu procesu. ALE mysqli nie ma takiej funkcji ...
Jedyne, co mogłem zrobić, to zadzwonić do mysqli-> ping(), a jeśli to zwróciło fałsz, ponownie połączyć się z bazą danych w rodzica. Jest to bardzo nieefektywne i wolałbym raczej dowiedzieć się, jak zrobić to poprawnie z mysqli (i bez potrzeby ręcznego ponownego połączenia), które muszą się zmienić z powrotem na mysql ..
Jakieś sugestie?
To zadziałało. Nie zdawałem sobie sprawy, że nie można użyć ini_set do modyfikacji tej zmiennej, a będąc geniuszem, dodałem linię do php.ini wcześniej, nie wiedząc, że istnieje już linia mysli.reconnect = Off w dalszej części plik. Ale usunięcie tego i tylko używanie mysqli.reconnect działało i powodowało, że mysqli-> ping() działał jak mysql_ping. Dzięki za pomoc! –