Pregunta

Tengo problemas utilizando la clase mysqli en PHP y no he podido encontrar la respuesta en cualquier lugar.

En mi script de una clase crea una conexión mysqli que utiliza a través de ella de funciones. Después, este script horquillas. La conexión es utilizado por los niños, así, pero estoy corriendo en el problema de la conexión se cierra (el servidor MySQL se ha ido) en los padres cuando los niños mueren.

Antes de que me pasa a Mysqli (se acaba de usar MySQL) lo llamé mysql_ping para asegurar que la conexión db estaba allí antes de realizar la consulta en el proceso padre. Mysqli tiene una función de ping similar, pero en realidad no vuelva a conectar si la conexión se ha ido. He intentado utilizar el mysqli.reconnect = ON configuración global sin suerte (usando php.ini y ini_set).

La función mysql_connect php le permite captar una conexión ya existente, por lo que si yo estaba usando MySQL en lugar de mysqli, que simplemente podría reutilizar la conexión en el niño inmediatamente después del proceso bifurcado. PERO mysqli no parece tener ninguna tal funcionalidad ...

Lo único que pude hacer fue mysqli- llamada> ping () y si que devuelve false luego vuelva a conectar a la base de datos en la matriz. Esto es terriblemente ineficiente, y yo preferiría encontrar la manera de hacerlo correctamente con mysqli (y sin necesidad de reconexiones manuales) que tener que cambiar de nuevo a mysql ..

¿Alguna sugerencia?

¿Fue útil?

Solución

El documento de mysqli_ping() dice que si establece la opción global mysqli.reconnect a 1 (en su php.ini) entonces mysqli_ping() se volverá a conectar cuando se detecta la conexión se ha ido.

Actualización: Desde que respondieron a esta pregunta en 2009, PHP se ha movido principalmente en utilizar el mysqlnd controlador por defecto en lugar de libmysql . Como se menciona en el comentario anterior, mysqlnd no es compatible con la función mysqli_ping(), y los desarrolladores de PHP hizo esto intencionalmente, de acuerdo con su respuesta "no van a resolver" en https://bugs.php.net/bug.php?id=52561

Así que no parece haber ninguna solución para la reconexión automática en PHP más.

Otros consejos

u puede probar algo un poco diferente .. en lugar de mesa de ping .. tratar de enviar una consulta muy simple de baja intensidad como "seleccionar ahora ()" y ver si se consigue mejorar los resultados.

¿No puedes usar conexiones persistentes? Además, ¿es realmente necesario horquilla ()?

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/ es / mysqli.real-connect.php ... volver a instalar php y verifica la configuracion de php.ini

Creo que es necesario establecer mysqli.reconnect en my.cng, que es la configuración de MySQL, en lugar de php.ini, no pude lograr cambiar vuelva a conectar a través de ini_set, pero mi sys administrador hice en my.cnf .

Así, poco confusa que otros lo han hecho dentro de php.ini ....

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top