Frage

Ich habe Probleme die mysqli-Klasse in PHP und ich habe nicht die Antwort finden überall in der Lage.

In meinem Skript erstellt eine Klasse eine Mysqli Verbindung, dass es überall in seinen Funktionen verwendet. Danach dieses Skript Gabeln. Die Verbindung wird von den Kindern als gut, aber ich bin mit in das Problem der Verbindung geschlossen wurde, in den übergeordneten (MYSQL-Server ist weg), wenn die Kinder sterben.

Bevor ich mysqli geschaltet (wurde nur mysql) ich einfach mysql_ping genannt, um sicherzustellen, dass die DB-Verbindung war, bevor die Abfrage in dem übergeordneten Prozess durchgeführt wird. Mysqli hat eine ähnliche Ping-Funktion, aber es nicht wirklich wieder, wenn die Verbindung weg ist. Ich versuchte, die mysqli.reconnect mit = ON globaler Einstellung ohne Glück (mit php.ini und ini_set).

Die PHP mysql_connect Funktion ermöglicht es Ihnen, eine bereits bestehende Verbindung zu packen, so dass, wenn ich mysql statt mysqli verwenden, konnte ich einfach die Verbindung in das Kind wiederverwenden direkt nach dem Prozess gegabelt. ABER Mysqli scheint nicht, eine solche Funktionalität zu haben ...

Das einzige, was ich in der Lage war zu tun war Anruf mysqli-> ping () und wenn die falschen dann in die Datenbank in den übergeordneten wieder an. Das ist schrecklich ineffizient, und ich würde viel lieber herausfinden, wie es mit mysqli richtig zu tun (und ohne manuelle Reconnects), dass .. zu mysql ändern zurück zu mit

Irgendwelche Vorschläge?

War es hilfreich?

Lösung

Die Doc für mysqli_ping() sagt, dass, wenn Sie die globale Option mysqli.reconnect bis 1 (in der php.ini), dann wird mysqli_ping() wieder, wenn es die Verbindung erkennt weg gegangen ist.

Update: Da ich diese Frage im Jahr 2009 beantwortet hat PHP meist bewegt auf den mysqlnd Treiber standardmäßig anstelle von libmysql . Wie weiter unten im Kommentar erwähnt, mysqlnd unterstützt nicht die mysqli_ping() Funktion und die PHP-Entwickler haben absichtlich diese nach ihrem "Wird nicht Fix" Antwort in https://bugs.php.net/bug.php?id=52561

So scheint es mehr in PHP keine Lösung für die automatische Wiederherstellung der Verbindung zu sein.

Andere Tipps

u kann etwas ein bisschen anders .. statt ping versuchen .. versuchen, eine wirklich einfache niedrige Intensität Abfrage wie „wählen Sie nun ()“ zu senden und sehen, ob Sie bessere Ergebnisse erzielen.

Sie können nicht verwenden persistente Verbindungen? Auch ist das wirklich nötig Gabel ()?

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

Verwenden Sie http://www.php.net/manual/ de / mysqli.real-connect.php ... php neu installieren und Ihre php.ini-Einstellungen überprüfen

Ich glaube, Sie mysqli.reconnect in my.cng festlegen müssen, die die MySQL-Konfiguration, anstatt php.ini, konnte ich es nicht geschafft über ini_set wieder zu ändern, aber mein Sys Admin tat es in my.cnf .

Also, bisschen verwirrt, dass andere haben es innerhalb von php.ini gemacht ....

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top