PHP - Mantener la conexión a una base de datos en varias paginas web

 
Vista:
sin imagen de perfil
Val: 126
Ha aumentado su posición en 12 puestos en PHP (en relación al último mes)
Gráfica de PHP

Mantener la conexión a una base de datos en varias paginas web

Publicado por German David (54 intervenciones) el 06/01/2021 12:52:49
Cordial saludo.
Actualmente estoy diseñando un sitio web. En la primera pagina, hago una conexión a la base de datos que esta en SQL SERVER para validar si el usuario y la contraseña son validos. En este punto ya el logrado la conexión a la base de datos. Si el usuario y la contraseña son correctos, me lleva a otra pagina donde ingreso dos datos que serán necesarios para hacer otra consulta a la base de datos. Yo asumía que como ya había echo una conexión a la base de datos en la pagina inicial, el resto de paginas automáticamente también tendrían la conexión, pero no fue así ya que me salió este error en pantalla.

Warning: sqlsrv_query() expects parameter 1 to be resource, null given in /var/www/html/analistaflota/conexion_sql_server.php on line 11

A continuación presento el código en cuya linea 11 esta la variable $stml.

1
2
3
4
5
6
7
8
9
<?php
    //esta variable representa la consulta en la base de datos
    $año=$_POST['año'];
    $semana=$_POST['semana'];
    //luego de tener las variables ingresadas por medio de un formulario web, se las asigno a la consulta
    $sql_query="SELECT * FROM [dbo].[fnTbCtmEstado]($año,$semana)";
    //esta es la funcion que me permite hacer la consulta y tenerla disponible
    $stml=sqlsrv_query($con,$sql_query);
?>

En la primera pagina yo había creado $con y había logrado la conexión para la validación de usuario y contraseña, pero al invocarla nuevamente en esta otra pagina, veo que ya no me funciona.

Estaré atento a recomendaciones y sugerencias que me puedan brindar, pues mi deseo es hacer la conexión a la base de datos una sola vez y poder utilizar dicha conexión en varias paginas web y una vez se cierre el sitio web, se efectué la desconexión.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Mantener la conexión a una base de datos en varias paginas web

Publicado por Mauro (1036 intervenciones) el 06/01/2021 14:13:30
Hola Germán:

Me parece que tienes una confusión respecto del ámbito de las variables que defines en php.

En principio, cada script define su propio espacio de memoria, si quieres compartir variables entre scripts debes usar algún otro mecanismo, por ejemplo, el de sesiones.

En particular, compartir la conexión a la base de datos no es tan sencillo... lo más usual es abrir la conexión en cada script.

Otra forma es usar conexiones persistentes. En este artículo puedes leer más detalles.

Coméntame si te queda alguna duda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 126
Ha aumentado su posición en 12 puestos en PHP (en relación al último mes)
Gráfica de PHP

Mantener la conexión a una base de datos en varias paginas web

Publicado por German David (54 intervenciones) el 07/01/2021 12:24:41
Hola Mchojrin. Es muy interesante la respuesta y me abre el panorama para investigar el tema de sesiones y de conexiones persistentes.
Fui al link que me recomendaste y veo que es para conexiones a bases de datos en MySql.
Agradezco si me envías información sobre como crear sesiones y como hacer conexiones persistentes con base de datos en SQL SERVER.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Mantener la conexión a una base de datos en varias paginas web

Publicado por Mauro (1036 intervenciones) el 07/01/2021 13:49:52
Hola Germán:

Me alegra que te haya ayudado :)

Sobre el tema sesiones tengo varios artículos publicados, puedes verlos aquí, si nunca las has usado te recomiendo comenzar por este (Que no es específicamente de sesiones pero te dará una idea clara de para qué sirven).

Respecto de las conexiones permanentes a SQL Server, lo que te recomiendo es que utilices PDO, algo como:

1
2
3
4
5
<?php
$dbh = new PDO("sqlsrv:Server=localhost;Database=testdb", "NombreUsuario", "Contraseña", [
    PDO::ATTR_PERSISTENT => true
]);
?>

PDO es una capa de abstracción sobre diferentes drivers de bases de datos que presenta una interface orientada a objetos.

Consúltame si te queda alguna duda ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 126
Ha aumentado su posición en 12 puestos en PHP (en relación al último mes)
Gráfica de PHP

Mantener la conexión a una base de datos en varias paginas web

Publicado por German David (54 intervenciones) el 08/01/2021 13:27:01
Hola Mchojrin, muchas gracias por la información. Me leí cada uno de los link que me enviaste, obteniendo mucha claridad al respecto y abriendo la mente para hacer nuevas cosas.
Teniendo esto presente, voy a crear una base de datos que en el momento que el usuario ingrese sus datos en el sito web, me permita saber a que horas se conecto. Seria como una base de datos con cuatro campos que serian: id, usuario, fecha_hora_conexion, fecha_hora_desconexion.
Los primeros tres campos se como insertarlos, pero no se como hacer en PHP para que en el momento en que el usuario cierre el sitio, me inserte la fecha y hora de ese momento.

Agradezco alguna recomendación que me puedas brindar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Mantener la conexión a una base de datos en varias paginas web

Publicado por Mauro (1036 intervenciones) el 11/01/2021 14:36:36
Es un tema el de identificar el momento de desconexión... se me ocurren varias opciones:

1 - Puedes intentar disparar un ajax al momento en que el usuario cierra la ventana, aunque no es muy fácil (ni muy confiable), puedes ver más información en https://stackoverflow.com/questions/3888902/detect-browser-or-tab-closing
2 - Puedes tener un proceso que envíe periódicamente (cada un segundo por ejemplo) un ping al server y, cada vez que se recibe esa señal actualizar un campo en la db (Algo como ultima_actividad). Cuando el usuario cierre el navegador esa señal no se enviará, de modo que puedes tomar el último dato como momento de cierre.

Depende un poco de qué tan importante sea tener mucha precisión
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 126
Ha aumentado su posición en 12 puestos en PHP (en relación al último mes)
Gráfica de PHP

Mantener la conexión a una base de datos en varias paginas web

Publicado por German David (54 intervenciones) el 11/01/2021 18:42:31
Muchas gracias, la ayuda fue muy buena y me dió claridad en el tema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Mantener la conexión a una base de datos en varias paginas web

Publicado por Mauro (1036 intervenciones) el 11/01/2021 21:10:16
Me alegra! Cualquier cosa me consultas :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar