Question

Je ne parviens pas à utiliser la classe mysqli en PHP et je ne l'ai pas été en mesure de trouver la réponse partout.

Dans mon script une classe crée une connexion mysqli qu'il utilise tout au long de c'est des fonctions. Par la suite, cette fourche de script. La connexion est utilisée par les enfants, mais je suis en cours d'exécution dans le problème de la connexion étant fermé (serveur MYSQL Has Gone Away) dans le parent quand meurent les enfants.

Avant je suis passé à Mysqli (vient en utilisant MySQL) J'ai simplement appelé mysql_ping pour assurer que la connexion db était là avant d'effectuer la requête dans le processus parent. Mysqli a une fonction ping similaire, mais il ne se reconnecte pas vraiment si la connexion est parti. J'ai essayé d'utiliser la mysqli.reconnect = ON paramètre global sans chance (en utilisant php.ini et ini_set).

La fonction php mysql_connect vous permet de saisir une connexion déjà existante, donc si j'utilisais mysql au lieu de mysqli, je ne pouvais tout simplement réutiliser la connexion à l'enfant juste après le processus fourchue. MAIS mysqli ne semble pas avoir une telle fonctionnalité ...

La seule chose que je pouvais faire était mysqli- appel> ping () et si cela retourne faux reconnectez à la base de données dans le parent. Ceci est terriblement inefficace, et je préférerais comprendre comment le faire correctement avec mysqli (et pas besoin de reconnexions manuelle) avoir à revenir à MySQL ..

Toutes les suggestions?

Était-ce utile?

La solution

Le doc pour mysqli_ping() dit que si vous définissez l'option globale mysqli.reconnect à 1 (dans votre php.ini) puis mysqli_ping() se reconnecte quand il détecte la connexion a disparu.

Mise à jour: Comme je répondu à cette question en 2009, PHP a la plupart du temps passé à utiliser les mysqlnd par pilote par défaut au lieu de libmysql . Comme il est mentionné dans le commentaire ci-dessous, mysqlnd ne prend pas en charge la fonction mysqli_ping(), et les développeurs PHP ont fait cela intentionnellement, selon leur réponse « ne fixerai pas » dans https://bugs.php.net/bug.php?id=52561

Donc, il semble y avoir aucune solution pour la reconnexion automatique en PHP plus.

Autres conseils

u peut essayer quelque chose d'un peu différent .. au lieu de ping .. essayer d'envoyer une requête à faible intensité vraiment simple comme « select maintenant () » et voir si vous obtenez des meilleurs résultats.

vous ne pouvez pas utiliser des connexions persistantes? Aussi, est-ce vraiment nécessaire à la fourchette ()?

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

Utilisez http://www.php.net/manual/ fr / mysqli.real-connect.php ... réinstaller php et vérifiez vos paramètres de php.ini

Je pense que vous devez définir mysqli.reconnect dans my.cng, qui est la config mysql, plutôt que php.ini, je ne parvenais pas à changer reconnecte via ini_set, mais mon système admin il l'a fait dans my.cnf .

Alors, peu confus que d'autres l'ont fait dans les php.ini ....

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top