Domanda

Ho problemi utilizzando la classe mysqli in PHP e non sono stato in grado di trovare la risposta da nessuna parte.

Nel mio script di una classe crea una connessione mysqli che usa durante tutta la sua funzionalità. In seguito, questo script forchette. La connessione viene utilizzata dai bambini pure, ma sto correndo nel problema della connessione in fase di chiusura (MySQL Server è andato via) nel genitore, quando i bambini muoiono.

Prima sono passato al MySQLi (è stato appena usando mysql) ho semplicemente chiamato mysql_ping per assicurare che la connessione db era lì prima di eseguire la query nel processo padre. Mysqli ha una funzione ping simile, ma in realtà non ricollegare se il collegamento è andato. Ho provato ad utilizzare il mysqli.reconnect = ON impostazione globale senza fortuna (utilizzando php.ini e ini_set).

La funzione mysql_connect php permette di afferrare una connessione già esistente, quindi se stavo usando mysql invece di mysqli, potrei semplicemente riutilizzare la connessione nel bambino subito dopo il processo biforcuta. MA mysqli non sembra avere alcun tale funzionalità ...

L'unica cosa che ho potuto fare è stato mysqli- chiamata> ping () e se quello restituito false ricollegare al database nel genitore. Questo è terribilmente inefficiente, e mi sarebbe molto meglio a capire come farlo correttamente con mysqli (e senza bisogno di riconnette manuale) che dover cambiare di nuovo a mysql ..

Qualche suggerimento?

È stato utile?

Soluzione

Il dottore per mysqli_ping() dice che se si imposta l'opzione globale mysqli.reconnect a 1 (nel php.ini) allora mysqli_ping() si riconnetterà quando rileva la connessione è andato via.

Aggiornamento: Da quando ho risposto a questa domanda nel 2009, PHP è per lo più spostato di utilizzare il mysqlnd il driver di default al posto di libmysql . Come accennato nel commento qui sotto, mysqlnd non supporta la funzione mysqli_ping(), e gli sviluppatori PHP fatto questo intenzionalmente, in base alla loro risposta "non risolverà" in https://bugs.php.net/bug.php?id=52561

Quindi, non sembra esserci alcuna soluzione per riconnessione automatica in PHP più.

Altri suggerimenti

u può provare qualcosa di un po 'diverso .. invece di ping .. provare a inviare un molto semplice query a bassa intensità come "selezionare ora ()" e vedere se si ottiene alcun risultato migliore.

Non puoi utilizzare le connessioni persistenti? Inoltre, è davvero necessario a fork ()?

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

http://www.php.net/manual/ it / mysqli.real-connect.php ... reinstallare php e controllare le impostazioni di php.ini

Credo che è necessario impostare mysqli.reconnect in my.cng, che è la configurazione di MySQL, invece di php.ini, non riuscivo a cambiare ricollegare via ini_set, ma il mio amministratore di sistema fatto in my.cnf .

Quindi, tantino confuso che altri lo hanno fatto all'interno di php.ini ....

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top