Enlaces
Esta en:

documentos
Arriba
Bind-9
Bind-8
Ad+bind
Dhcp
Kdephp
Shell
Trucos
Php
Documentos
Cuestiones php
Fedora
Legal
W2000 xp
COMOS
Errores dns

Re: [PHP-ES] Problema con Sesiones y Conexion a SQL Server

Write haof XML files: Rafael <rsalazar_at_innox.com.mx>
Fecha: Sat, 25 Mar 2006 00:55:09 -0600

        Comentarios "inline"

Carlos Rodríguez wrote:
> Hola a todos, tengo un gran problema, quiero en una pagina la conexion a SQL
> server 2000, pero para no tener que conectarme en otras paginas ya que
> utilizo la misma base siempre quiero crear como variable de sesion a la de
> la conexion, pero tengo un problema, la variable si me funciona en la
> primera pagina pero en las demas, me sale el siguiente error.
>
> *Warning*: mssql_query(): supplied argument is not a valid MS SQL-Link
> resource in *c:\archivos de
> programa\easyphp1-8\www\pruebas\conexion\next.php* on line *7*
>
> Envio el codigo algo sensillo de prueba espero que me puedan dar una idea
> para solucionar esto. Gracias...
>
> //////la primer donde me conecto a la base
> session_name('PRUEBA');
> session_start();
>
> $_SESSION['conn'] = mssql_connect("ZEUS", "Carlos", "");
> mssql_select_db("CELL_WORLD", $_SESSION['conn']);
> $respuesta = mssql_query("SELECT * FROM USUARIO", $_SESSION['conn']);
>
> echo(mssql_num_rows($respuesta) . "<br>");
> echo('next-->');

        Las conexiones a bases de datos se cierran automáticamente al terminar
el script (i.e. no es necesario cerrarlas de manera explícita, PHP lo
hace una vez terminada la finalizado/abortado el script) Para conservar
la conexión debes establecer una persistente (siguiendo la notación de
PHP, la función a llamar sería "mssql_pconnect()")

        Por cierto, también sería bueno verificar que efectivamente se
estableciera la conexión antes de enviar cualquier sentencia SQL al
servidor (DB)

> //////////////////////////////
> ////////////////////////
>
> ////la segunda donde quiero utilizar la variable de conexion y donde me sale
> el warning
>
> session_name('PRUEBA');
> session_register('conn'); //para no tener que conectarme denuevo
>
> $respuesta = mssql_query("SELECT * FROM USUARIO", $_SESSION['conn']);
> echo(mssql_num_rows($respuesta) . "<br>");

        session_register(), de usarla, debería haber sido en la primer página,
no en la segunda (consulta el manual para más información al respecto)
En ésta página bastaría usar session_start() y recuperar el valor en
$_SESSION['conn']

   session_start();
   $conn = @$_SESSION['conn'];
   // Verificación inicial: se intenta establecer conexión
   if ( !is_resource($conn) ) {
     $conn = mssql_pconnect( ... );
     $_SESSION['conn'] = $conn;
   }
   // Segunda verificación: se aborta
   if ( !is_resource($conn) ) {
     die('Conexión fallida');
   }

        Ahora, una vez escrito todo esto... la teoría detrás un las conexiones
persistentes (o "permanentes") nos dice que NO se establecerá una nueva
conexión con el servidor (DB) si ya existe una abierta. Es decir, si
tienes algo como
   $conn = mssql_pconnect( ... );
en una página, y le das refresh 5 veces, no establecerá la conexión con
el server (DB) 5 veces, sólo lo hará la primera vez y en las siguientes
sólo re-utilizará la primera. En pocas palabras, no necesitarías
guardar el recurso de conexión devuelto por la conexión, ya que lo hace
de forma transparente.

        Ésto, llevado a la práctica, no siempre funciona. La única vez que lo
intenté fue con Apache2 y MySQL, y parece que Apache, siendo
multi-thread, pierde la conexión persistente (aunque ésta siga abierta)
creada anteriormente --parece que cada "hilo" es independiente--, para
casos como éste, la aproximación de guardar el recurso de la conexión en
sesión podría funcionar (aunque me he dicho que lo voy a probar, hasta
la fecha no lo he hecho, así que agradecería que me comentaras si ha
funcionado o no)

        Espero haber ayudado un poco a clarificar las cosas, y no en ofuscarlas
(que suele suceder cuando uno dá detalles de más)

-- 
Atentamente,
J. Rafael Salazar Magaña
Innox - Innovación Inteligente
Tel: +52 (33) 3615 5348 ext. 205 / 01 800 2-SOFTWARE
http://www.innox.com.mx
-- 
PHP Spanish Localization Talk Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
Nearby sáb mar 25 2006 - 12:23:18 CET

Este archivo fue generado por hypermail 2.2.0 : mié nov 07 2007 - 20:55:35 CET


Página Principal
Google

Web
dns.bdat.net

Visita nuestro proveedor:
www.bdat.net

Publicidad:

Impresenteibols:Humor Jazz, música en vivo