Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Conexión Interbase con objetos

Estas en el tema de Conexión Interbase con objetos en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola estoy inciandome en el mundillo php. Quiero realizar una aplicación que maneja datos de una BBDD de interbase. Estoy utilizando clases para encapsular el ...
  #1 (permalink)  
Antiguo 02/05/2006, 07:33
 
Fecha de Ingreso: abril-2006
Mensajes: 76
Antigüedad: 18 años
Puntos: 0
Conexión Interbase con objetos

Hola estoy inciandome en el mundillo php. Quiero realizar una aplicación que maneja datos de una BBDD de interbase. Estoy utilizando clases para encapsular el acceso a la base de datos y registrarla dentro de una session (para poder acceder durante toda una session).

Mi problema es que la conexión se realiza con exito y ibase_connect me devuelve un interbase link resource válido. Pero al utilizarlo en otro mètodo de la clase el resource se ha perdido. Puede ser que las propiedades de una clase no quedan registradas dentro de una session?!?!?

Primero registro en la session los objetos aplicacion y bbdd. Luego utilizo bbdd->Conecta para crear una conexión persistente. El resultado es OK me devuelve un resource link que la guardo dentro de la misma clase. Luego llamo a app->Valida_usuario() que llama a bbdd->Sql() y aqui es donde no dispone del resource link!!!!!

Si alguien me puede dar una manita encantado de la vida.!!!!

PD: Utilizo PHP4 en un linux con Apache2 con register_globals OFF.

Grácias.


----------------------------- INDEX.PHP
<?php
include_once ("app.php");
include_once ("bbdd.php");
session_start();
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">

<%@ language=PHP%>
<html>

<head>
<title>BLABLABLA</title>
<meta http-equiv="generator" content="e-Hipotels" />
</head>

<body bgcolor="#FFF8FF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<p>Bienvenido al portal BLABLABLA</p>
<?
if ( ! isset ( $_SESSION['aplicacion']) )
$_SESSION['aplicacion'] = new app;
if ( ! isset($_SESSION['bbdd']) )
$_SESSION['bbdd'] = new bbdd;
$_SESSION['bbdd']->Conecta();
$_SESSION['aplicacion']->login();
?>
</body>
</html>

----------------------- MAIN.PHP
<?php
include_once ("app.php");
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<%@ language=PHP%>
<html>

<head>
<title><u>Menú principal</u></title>
<meta http-equiv="generator" content="e-Hipotels" />
</head>

<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<?
$aplicacion = $_SESSION['aplicacion'];
if ( ! $aplicacion->valida_usuario() )
$aplicacion->loginKO();
else
$aplicacion->menu();
?>
</body>
</html>

-------------------------------APP.PHP
<?php
include ("bbdd.php");
session_start();
?>
<?php

class app
{
var $usuario;
var $clave;
var $user_id;

function login()
{
include ( "login.inc" );
}
function valida_usuario()
{
$this->usuario = $_POST['login_usuario'];
$this->clave = $_POST['login_clave'];
$bbdd = $_SESSION['bbdd'];
echo $bbdd->conexion;
$texto_sql = "Select * from usuario";
$regs = $bbdd->Sql( $texto_sql );

}
function loginKO()
{
include ( "loginKO.inc");
}
function info_usuario()
{

echo "Usuario conectado: ";
echo ($this->clave);
}
function menu()
{

}
}
?>

----------------------------- BBDD.PHP
<?php
session_start();
?>

<?php
class bbdd
{
var $user;
var $pass;
var $server;
var $conexion;

function Conecta()
{
$this->server = "10.11.3.2:d:/TEST.gdb";
$this->user = "SYSDBA";
$this->pass = "test";
$this->conexion = ibase_pconnect( $this->server, $this->user , $this->pass );
echo "Conectado a ibase cnx:";
echo $this->conexion ;
}
function Sql( $comando )
{
echo $this->user . " conexion: ";
echo $this->conexion;
$qry = ibase_query( $this->conexion, $comando );

while ($R = ibase_fetch_object($qry))
{
echo $R->USUARIO;
}
}

}
?>
  #2 (permalink)  
Antiguo 02/05/2006, 11:45
 
Fecha de Ingreso: abril-2004
Ubicación: Rosario, Argentina
Mensajes: 124
Antigüedad: 20 años
Puntos: 11
Las propiedades de una clase SI se pueden guardar en una sesión, pero los recursos no, es decir que el recurso que te devolvió la función que se conectó a la base de datos no lo podés guardar en la sesión.

Cuando grabes el objeto en la sesión asegurate de utilizar los métodos __sleep() y __wakeup() para establecer qué propiedades se van a grabar en la sesión ( http://de3.php.net/manual/es/languag...-functions.php ).

Cuando reutilices un objeto que guardaste en una sesión tenés que re-conectarlo, es decir llamar nuevamente a las funciones que te devuelvan el recurso de conección, en tu caso: ibase_pconnect().

Un saludo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:29.