Problema con variable de sesion y variable de conexion

Iniciado por Vaagish, 16 Marzo 2013, 00:36 AM

0 Miembros y 1 Visitante están viendo este tema.

Vaagish

Buenas señores y señoras! :) Tengo una cosulta que me esta rompiendo la cabeza...

Es posible asignar una variable de tipo "Resource id#" a una variable de sesion ?

Porque no he podido hacerlo, por mas que intento, la variable "$_SESSION['Conex']" me queda vacia!

Ahora veamos un ejemplo de lo que quiero..

include("Conexion.php");
$Conexion = Conectar(); --> Donde conectar es una funcion que conecta a mysql
$_SESSION['Conex'] = $Conexion;

La function conectar() funciona, lo se..

Yo preciso la variable "$Conexion" porque hago una consulta desde una funcion y no puedo acceder a la variable de otra forma si la variable no es global...

Bueno.. desde ya, Gracias!!


Vaagish

Gracias por responder Darhius! Pero eso lo tengo tambien.. la sesion funciona, porque tengo otras variables de sesion que funcionan, y otras consultas sql que tambien funcionan.. :/

Pero no me acepta la variable de conexion dentro de una variable de sesion.. :(

Estoy por enfermar con esto.. jajaja

Vaagish

Bueno,, sigo luchando con esto.. ahora intente con global $Conexion.. tampoco funciona,, tengo que configurar el php.ini para poder usar variables globales ??

s7evin

Buenos días,

Hasta donde yo sé, no se puede guardar el ID de un recurso en una variable de sesión. Este es solo válido durante la duración del script/conexión.
Hay alternativas, centralizar cada petición en un único archivo (index, "bootstrap", etc).
Si esto no te convence... pues podrías pasar por sessión el usuario y password de la conexión (esta alternativa no me gusta mucho, personalmente).
También puedes incluir el archivo de conexión/configuración en la parte de código donde lo necesitas.

Si pudieras mostrar un poco más de código para hacernos una idea de cual es tu intención, quizá podríamos ayudarte algo mejor jeje

Un saludo!

#!drvy

#5
En la documentación de PHP puedes ver que los recursos (resource ID) y algunos objetos no pueden ser serializados y por tanto no se pueden guardar en sesiones. Mysql y Mysqli cumplen con eso y sus resources/objects no pueden ser guardados.

http://www.php.net/manual/es/intro.session.php

Si usas POO puedes guardar $conexion en una variable del Class y así la puedes solicitar en cualquier función(del class). Si usas scripting normal, puedes hacerla global.

Saludos

Vaagish

Buenos dias! Primero que nada gracias por responder!

Les cuento como va la cosa..

La conexion la realizo en un php externo y lo incluyo en todos los otros php donde necesito la conexion de esta forma:

<?php
function Conectar()
{
   $db_host="localhost";
   $db_usuario="root";
   $db_password="";
   $db_nombre="usuarios";
   $conexion = @mysql_connect($db_host, $db_usuario, $db_password) or die(mysql_error());
   $db = @mysql_select_db($db_nombre, $conexion) or die(mysql_error());

   return $conexion;
}
?>

Bien, con eso realizo la conexion a la base de datos,, luego en el php que necesito la conexion:

<?php
session_start("Cliente");
include("Conexion.php");
$Conexion = Conectar();

function Ingresar()
{
   
   global $Conexion;
   echo "alert('$Conexion')";
   
}
?>

luego llamo a la funcion cuando la necesito..

Evidentemente este php no hace nada.. es un resumen,, el problema es que esto tampoco funciono,, al igual que poner la variable de conexion en $_SESSION,, la unica alternativa que veo es abrir una conexion en la funcion y cerrarla al terminar la funcion, entonces cada vez que la llame se crearia una nueva conexion y no daria ( en teoria ) problemas..

Gracias por responder y perdon la demora ;)

Vaagish

Cita de: drvy | BSM en 18 Marzo 2013, 13:49 PM
En la documentación de PHP puedes ver que los recursos (resource ID) y algunos objetos no pueden ser serializados y por tanto no se pueden guardar en sesiones. Mysql y Mysqli cumplen con eso y sus resources/objects no pueden ser guardados.

http://www.php.net/manual/es/intro.session.php

Si usas POO puedes guardar $conexion en una variable del Class y así la puedes solicitar en cualquier función(del class). Si usas scripting normal, puedes hacerla global.

Saludos

Probablemente si lo que comente recien no funcione me lanze al POO como solucion al problema..

#!drvy

Hola,

Seguro que no te funciona lo que haces en el mensaje anterior ?
Código (php) [Seleccionar]
<?php
include("Conexion.php");
$Conexion Conectar();

function 
Ingresar()
{

   global 
$Conexion;
   echo 
"alert('$Conexion')";

}

Ingresar();
?>


Me devuelve: alert('Resource id #4') y me funciona perfectamente. No sera que tienes algún error en los nombres (del include) ?

CitarProbablemente si lo que comente recien no funcione me lanze al POO como solucion al problema..
Lo que por lo menos deberias hacer es utilizar mysqli en vez de mysql. mysql ya esta marcada como obsoleta y en futuras versiones de php sera eliminada.

Saludos

Vaagish

Gracias a todos por las respuestas, no he podido volver al proyecto aun,, en cuanto tenga un poco de tiempo lo terminare y les cuento como lo solucione..
Por ahora me quedo con el consejo de pasar a mysqli, que la verdad ni sabia que existia,, asi que tengo cosas para estudiar.. jeje

Abrazos!