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

Objeto de conexion de base de datos

Estas en el tema de Objeto de conexion de base de datos en el foro de Frameworks y PHP orientado a objetos en Foros del Web. A ver, no se si estoy haciendo esto bien, estoy haciendo una aplicacion orientada a objetos, con un objeto para las conexiones a la base ...
  #1 (permalink)  
Antiguo 05/09/2006, 06:31
 
Fecha de Ingreso: junio-2004
Mensajes: 266
Antigüedad: 19 años, 10 meses
Puntos: 8
Objeto de conexion de base de datos

A ver, no se si estoy haciendo esto bien, estoy haciendo una aplicacion orientada a objetos, con un objeto para las conexiones a la base de datos.
La clase se llama bd_mysql, con su constructor, un metodo conectar, que devuelve una conexion y un metodo consultar que recibe como parametro una sentencia SQL y la ejecuta. Esta conexion, la paso como argumentos a metodos de otros objetos.

Tengo el siguiente proceso de insercion .php:
Código PHP:
<?
    
include_once("class/zona.php");
    include_once(
"php/funcion_forms.php");
    include_once(
"data.php");
    include_once(
"class/bd_mysql.php");
    
    
$obj_zona = new zona();

    
$obj_zona->set_point_x($point_x);
    
$obj_zona->set_point_y($point_y);

    
// creo el objeto bd_mysql, obtengo una conexion, y se la paso como
        // argumento al metodo insertar_zona de la clase zona
                
    
$obj_mysql = new bd_mysql();
    
$conexion $obj_mysql->conectar($bd,$servidor,$usuario,$clave);
    
$res $obj_zona->insertar_zona($conexion);
    
$obj_mysql->cerrar_conexion();    
?>

El metodo conectar de la clase bd_mysql es el siguiente:
Código PHP:
<?
/*Conexión a la base de datos*/
    
function conectar($basedatos,$servidor,$usuario,$clave) {
         
$this->basedatos $basedatos;
        
$this->servidor $servidor;
        
$this->usuario $usuario;
        
$this->clave $clave;
     
        
// Conectamos al servidor
        
$this->Conexion_ID mysql_connect($this->servidor$this->usuario$this->clave);

        if (!
$this->Conexion_ID) {
            
$this->Error "Ha fallado la conexión.";
            return 
0;
        }

        
//seleccionamos la base de datos
        
if (!@mysql_select_db($this->basedatos$this->Conexion_ID)) {
            
$this->Error "Imposible abrir ".$this->basedatos ;
            return 
0;
        }

        
/* Si hemos tenido éxito conectando devuelve el identificador de la conexión, sino devuelve 0 */
        
return $this->Conexion_ID;
    }
?>
Y el metodo insertar_zona de la clase zona:

Código PHP:
// Metodos de operaciones para la logica de negocio
function insertar_zona($miconexion) {
    
$sql "INSERT INTO zonas (point_x,point_y) VALUES (".    
                    
$this->point_x."','".
                    
$this->point_y."')";
    
        
$miconexion->consulta($sql);
            
    return 
$miconexion->Error;


El caso es que recibo error en la linea $miconexion->consulta($sql); de insertar_zona, el error es:


Fatal error: Call to a member function on a non-object in /var/www/vhost/........./zona.php on line 213


Hay algo que hago mal con el tema de los objetos, la verdad que voy un poco a ciegas, si alguien puede hecharme un cable...
  #2 (permalink)  
Antiguo 05/09/2006, 07:36
Avatar de B**
B**
 
Fecha de Ingreso: enero-2006
Ubicación: Monterrey,Mexico
Mensajes: 952
Antigüedad: 18 años, 3 meses
Puntos: 3
Tienes que crear una instancia de una clase para asi poder acceder a sus metodos, y tu No has creado el objeto $miconexion
Creo que ahi esta el error.. si no es asi.. que los gurus me corrijan.. (soy virgen en POO,jajja)
__________________
-URL= Go PHP5.
-Age=22.
-Learning=PHP,J2EE,Struts,MAMBO,C++,JSON,AJAX,XHTML ,CSS.
  #3 (permalink)  
Antiguo 05/09/2006, 09:01
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Tu problema esta aqui:
Código PHP:
 $obj_mysql = new bd_mysql();
    
$conexion $obj_mysql->conectar($bd,$servidor,$usuario,$clave);
    
$res $obj_zona->insertar_zona($conexion);
    
$obj_mysql->cerrar_conexion(); 
Tu metodo conectar te devuelve un resource de conexion, y eso NO es un objeto, (que es el que le estas enviando al metodo insertar_zona), lo que debes de pasar es el objeto conexion ($obj_mysql)
Código PHP:
 $obj_mysql = new bd_mysql();
    
$conexion $obj_mysql->conectar($bd,$servidor,$usuario,$clave);
    
$res $obj_zona->insertar_zona($obj_mysql);
    
$obj_mysql->cerrar_conexion(); 
  #4 (permalink)  
Antiguo 05/09/2006, 11:10
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 18 años, 10 meses
Puntos: 88
yo no se mucho de POO(estoy aprendiendo), y por esta razón no se si esto te esta afectando en tu consulta:

function conectar($basedatos,$servidor,$usuario,$clave) {
$this->basedatos = $basedatos;
$this->servidor = $servidor;
$this->usuario = $usuario;
$this->clave = $clave;

por lo que he leido primero debes declarar tus variables
function conectar($basedatos,$servidor,$usuario,$clave) {
var $basedatos = $basedatos;
var $servidor = $servidor;
var $usuario = $usuario;
var $clave = $clave;
var $Conexion_ID;

para que despues les puedas hacer referencia con $this ($this->basedatos)

saludos.
por favor, si estoy mal que me corrijan, gracias.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
  #5 (permalink)  
Antiguo 05/09/2006, 12:26
 
Fecha de Ingreso: junio-2004
Mensajes: 266
Antigüedad: 19 años, 10 meses
Puntos: 8
And the winner is... (and the Oscar go to...) GatorV.

Pues si, sabia yo que habia algo que no estaba haciendo bien. Mil gracias!
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 06:11.