Foros del Web » Programando para Internet » PHP »

Error en script para hacer consultas SQL

Estas en el tema de Error en script para hacer consultas SQL en el foro de PHP en Foros del Web. Hola a tod@s, he programado una clase que realiza consultas SQL. El código de la clase es éste: Código: <?php class Consulta extends ConexionDB{ private ...
  #1 (permalink)  
Antiguo 22/09/2011, 05:49
 
Fecha de Ingreso: febrero-2005
Ubicación: Madrid
Mensajes: 549
Antigüedad: 19 años, 2 meses
Puntos: 0
Pregunta Error en script para hacer consultas SQL

Hola a tod@s,

he programado una clase que realiza consultas SQL. El código de la clase es éste:
Código:
<?php

class Consulta extends ConexionDB{
  private $result;  // Declaración de atributos
  private $sql;

  function __construct($sql){
    $this->sql=@mysql_real_escape_string($sql, $this->dbLink) OR die("La consulta no es 
                        válida<br/>");
    $this->result=@mysql_query($this->sql, $this->dbLink) OR die("La consulta no ha podido 
                             llevarse a cabo<br/>");
  }

}

?>
Y el código de su super clase (ConexionDB) es éste:
Código:
<?php
class ConexionDB {
  private $dbHost;
  private $dbName;
  private $dbUser;
  private $dbPass;
  protected $dbLink;

  /**
   * Constructor de la Clase ConexionDB
  **/
  function __construct($dbName = 'votacion'){
    $this->dbHost='localhost';
    $this->dbUser='usuariodb';
    $this->dbPass='passworddb';
    $this->dbName=$dbName;
    $this->dbLink=@mysql_pconnect($this->dbHost, $this->dbUser, $this->dbPass);
    if(!$this->dbLink)
      throw new Exception('No se pudo conectar a la Base de Datos');
    if(!mysql_select_db($this->dbName,$this->dbLink))
      throw new Exception('No se pudo conectar a la Base de Datos: '.
                          $this->dbName);
  }

}

?>
He probado la clase ConexionDB de forma independiente y funciona perfectamente así que el problema está en la sub clase, en la clase Consulta
El problema es que si hago
Código:
<?php

require_once './ConexionDB.class.php';
require_once './Consulta.class.php';

$conexion=new ConexionDB();
$consulta=new Consulta('Select * from votacion');

?>
Me dice que La consulta no es válida y si, en lugar de tratar el error, dejo que el script falle, el error que me dice es que le estoy pasando un argumento NULL a la función mysql_real_escape_string como si la variable dbLink fuera igual a NULL pero en la línea
Código:
if(!$this->dbLink)
ya hago esa comprobación y no me salta la excepción.

¿Puede alguien ayudarme con ésto?

Muchas gracias de antemano por la ayuda.

Saludos,
Jose
__________________
Nadie dijo que ésto iba a ser fácil
  #2 (permalink)  
Antiguo 22/09/2011, 06:54
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Error en script para hacer consultas SQL

Buenas,

No sé exactamente cómo funciona el tema herencia en PHP, porque estoy algo despistado en este punto, pero analizando el código que pasas, tiene toda la pinta de que tu problema es porque no tienes bien enlazado el constructor de la clase hija con el de la clase padre. Del error que te da se puede deducir que $this->dbLink no está inicializado, en cuyo caso, mysql_real_escape_string() lanzará un warning y devolverá false. Para ver el mensaje de warning y asegurarte, quita el @ del principio de la función y a ver qué te imprime, igual te da más información.

Pero vamos, que tiene pinta de ser por eso, que el constructor de la clase hija no llama al de la clase padre, busca algo por ahí y nos comentas. Igual alguien te puede afinar más el tiro, ya te digo que no tengo mucha idea de este tema.

Un saludo.

Edito: es posible que tengas que utilizar parent.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #3 (permalink)  
Antiguo 22/09/2011, 07:06
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: Error en script para hacer consultas SQL

Amigo cuando tu haces herencias recuerda que en la clase hijo debes colocar el constructor del padre, sino esta no funcionara correctamente.

Código PHP:
Ver original
  1. class Hija extends Padre{
  2. private $c, $d;
  3. public function __construct($a, $b, $c, $d){
  4. parent::__construct($a, $b);
  5. $this->c = 'algo';
  6. $this->d = 'otra cosa';
  7. }
  8. }

Espero te sirva.
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #4 (permalink)  
Antiguo 22/09/2011, 07:11
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Error en script para hacer consultas SQL

Apredeadme, freídme a negativos, o lo q queráis... pero voy a intentar contestar (sin saber demasiado de POO)


Tu tienes dos clases, Conexion y Consulta. En conexion, tienes los métodos / atributos para conectarte a la bbdd, y en consulta (q extiendes esta ultima) tienes los de la consulta.

A mi forma de entender, si fuera POO solo deberias "iniciar" consulta, ya que esta heredaría todos los métodos / atributos de la primera.

Así puedes, para solucionarlo habria dos formas: el método _contruct de Conexion lo cambiar por otro (inicializa, por ejemplo), y lo llamas desde consulta al hacer el construct.....

O desde el construct de Consulta, llamas a parent::_construct (q seria el de Conexion) para inicializarla.

No sé si me he explicado, pero creo q por ahí van los tiros :)

Edit: jotaincubus se me ha adelantado :)
__________________
>> Eleazan's Source
>> @Eleazan
  #5 (permalink)  
Antiguo 22/09/2011, 12:34
 
Fecha de Ingreso: febrero-2005
Ubicación: Madrid
Mensajes: 549
Antigüedad: 19 años, 2 meses
Puntos: 0
De acuerdo Solucionado!

Problema resuelto! Muchas gracias a los 3 por la ayuda.

Un saludo,
Jose
__________________
Nadie dijo que ésto iba a ser fácil

Etiquetas: mysql, sql, variables, usuarios
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 14:55.