2011-02-28 14 views
33

Básicamente en seudo código que estoy buscando algo como¿Cómo puedo verificar si PHP ya está conectado a una base de datos?

if (connected_to_any_database()) { 
    // do nothing 
} 
else { 
    mysql_connect(...) 
} 

¿Cómo implemento

connected_to_any_database() 
+0

duplicado posible de [comprobar si la conexión es válida mysql] (http://stackoverflow.com/questions/3262463/check -if-mysql-connection-is-valid) –

Respuesta

43

¿Ha intentado mysql_ping()?

Comprueba si la conexión al servidor funciona o no. Si se ha reducido, se intenta una reconexión automática.

otra parte, un segundo enfoque (menos fiables) sería:

$link = mysql_connect('localhost','username','password'); 
//(...) 
if($link == false){ 
    //try to reconnect 
} 

Actualización: Desde PHP 5.5 en adelante, utilice mysqli_ping() lugar.

+4

Actualización: Con PHP 5.5 en adelante, use ['mysqli_ping() '] (http://www.php.net/manual/en/mysqli.ping.php) –

+0

@AlvinK. Si uso mysql_ping() muestra que tengo conexión, pero cuando uso @mysqli_ping() muestra que no no tiene conexión. ¿Cuál es el significado de i t. Estoy usando xampp. Aparentemente mi código php funciona en otra computadora pero no en la mía –

+0

@PankajNimgade: parece una biblioteca o problema de configuración, ¿intentó reinstalar xampp con otra versión? O incluso nginx + php5-fpm? Ejecute la secuencia de comandos con php-CLI con la opción '--verbose' activada. –

-2
// Earlier in your code 
mysql_connect(); 
set_a_flag_that_db_is_connected(); 

// Later.... 
if (flag_is_set()) 
mysql_connect(....); 
+0

Esto está mal, porque el servidor mysql se ha ido (conexión cercana por tiempo de espera) – azat

+0

@azat ¿Un tiempo de espera dentro de la vida útil de un script PHP? ¿Qué en la pregunta del OP te da esa idea? –

+0

Así que ... no sabemos lo que hace su script, la desisión correcta es mysql_ping – azat

2

antes ... (me refiero a algún lugar de algún otro archivo no está seguro de que ha incluido)

$db = mysql_connect() 

después ...

if (is_resource($db)) { 
// connected 
} else { 
$db = mysql_connect(); 
} 
+0

Incorrecto, el servidor mysql puede desaparecer – azat

+0

@azat ¿Alguna vez * has visto un servidor mySQL desaparecer en un script PHP cuando no era un problema de configuración? –

+0

Sí, veo, y no una vez – azat

16

Trate de usar la función de PHP mysql_ping:

echo @mysql_ping() ? 'true' : 'false'; 

tendrá que estar precedidos por "@" para suponer las advertencias de MySQL que obtendrá para el funcionamiento de este functi encendido sin estar conectado a una base de datos.

También hay otras formas, pero depende del código que está utilizando.

+0

Este no es un buen motivo para usar el operador "@". – mailo

+1

@mailto, estoy de acuerdo, ya que nunca es REALMENTE una buena idea para suprimir ningún error, sin embargo ... En este caso, hace el trabajo. La mejor opción sería verificar el recurso mysql. – McHerbie

+0

Sí, hace el trabajo, incluso podría usar eval() para realizar esta tarea, pero ¿estaría bien? Siempre debemos buscar la mejor solución posible, en mi opinión :) – mailo

0

Baron Schwartz bloguea que, debido a las condiciones de carrera, este 'verificar antes de escribir' es una mala práctica. Aboga por un patrón de prueba/captura con un reconnect en la captura. Aquí está el código de pseudo él recomienda:

function query_database(connection, sql, retries=1) 
    while true 
     try 
     result=connection.execute(sql) 
     return result 
     catch InactiveConnectionException e 
     if retries > 0 then 
      retries = retries - 1 
      connection.reconnect() 
     else 
      throw e 
     end 
     end 
    end 
end 

aquí es su blog completo: https://www.percona.com/blog/2010/05/05/checking-for-a-live-database-connection-considered-harmful/

Cuestiones relacionadas