¿Es óptimo abrir y cerrar la conexión a la BBDD en php cada vez que requiero de su uso?

publicado por: Anonymous

Utilizo la conexión a la base de datos para saber los usuarios que tengo guardados y así utilizarlos para validar el login. ¿Es recomendable que por cada petición (login) haya una conexión y una desconexión?

Adjunto código:

require_once "conn.php";
function validUser(&$error){
if((!isset($_POST['user'])) || (!isset($_POST['pass']))){
    $error[0] = "Usuario y/o contraseña incorrectos.";
    return null;
}
$user = $_POST['user'];
$pass = $_POST['pass'];
if(($user == '') || ($pass == '')){
    $error[0] = "Usuario y/o contraseña incorrectos.";
    return null;
}else{

    $con = connection();
    $sql = "SELECT name FROM usuarios WHERE name = :user AND password = :pass";
    $query = $con->prepare($sql);
    $query-> bindParam(':user', $user);
    $query-> bindParam(':pass', $pass);
    $query-> execute();
    $contador = $query -> rowCount();
    if($contador != 1){
        $error[0] = "Usuario y/o contraseña incorrectos.";
        return null;
    }
    $con = null;
    return $user;
}
}

solución

Como todo en la vida: depende. No todo es blanco o negro y no hay una respuesta concreta para una pregunta como ésta. Va a depender de muchos factores como por ejemplo:

  • ¿Cuántas conexiones esperas y cuántas conexiones simultáneas permite la base de datos?
  • ¿Qué lenguaje de programación y qué base de datos estás usando?
  • ¿Cómo de rápida debe ser la respuesta del sistema?
  • ¿El servidor de tu aplicación y de la base de datos están en la misma máquina?
  • Etc.

En PHP en particular, a no ser que definas una conexión persistente, la conexión a la base de datos se va a cerrar automáticamente al final del script, por lo que abrir/cerrar conexiones varias veces en la vida de una página puede ser excesivo: vas a ralentizar la página y consumir recursos de manera innecesaria.

Pero eso no quiere decir que no lo hagas: si tu sistema no necesita respuestas en tiempo real y la velocidad no es un factor crítico, la diferencia entre abrir/cerrar múltiples conexiones o mantener una abierta durante la vida del script va a ser casi despreciable.

Mi recomendación para el caso que planteas sería: déjalo como está. Creo que estás intentando optimizar de manera prematura algo que todavía no sabes si va a ser un problema. Céntrate en otras partes del sistema y si luego ves que abrir/cerrar múltiples conexiones te va a crear problemas de algún tipo (seguramente no), puedes probar otras opciones (p.e. una única conexión por script que la necesite o una fábrica de conexiones).

Citando a Knuth: “El verdadero problema es que los programadores gastan demasiado tiempo preocupándose de la eficiencia en los lugares equivocados en los momentos equivocados; la optimización prematura es la raíz de todos los males (o al menos de la mayoría) en programación.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *