Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/04/2006, 17:06
Avatar de nosoynadie
nosoynadie
 
Fecha de Ingreso: noviembre-2005
Ubicación: dando vueltas por aquí
Mensajes: 206
Antigüedad: 18 años, 5 meses
Puntos: 1
instancias de clases pasadas por referencia

Hola a todos,

estoy intentando hacer una aplicación con programación orientada a objetos y tengo un error que no entiendo, y que me está desquiciando

La aplicación genera informes sobre libros de una editorial. Para el proceso disponemos de una clase de conexión a la base de datos, clase conn, y otra para generar los informes, clase report. En medio del proceso tengo que comprobar que el título insertado no tiene ya un informe generado, así que creo una instancia de report, llamada $rpt, y comprobamos el título, con %rpt->checkTitulo().

Pues bien, el proceso se realiza casi correctamente en un servidor WindowsXP + MySQL 4.0.25-nt + PHP 5.0.5 (instalación estandard) PERO no puedo decir lo mismo cuando lo publico en un servidor Linux + MySQL 4.0.25-standard + PHP 4.4.2. En este último caso, cuando estoy comprobando el nombre de un nuevo libro 'parece colgarse' cuando tiene que hacer la conexión a la base de datos, línea
Código:
$res = $this->conec->query($sql);
¿Por que puede ser esta diferencia? Está bien lo de intentar guardar en la propiedad de la clase, $conec, una instancia de la clase de conexión?
Código:
$this->conec = &new conn;
¿se debe hacer por valor o por referencia? La parte del fichero donde uso las clases es:
Código:
	$rpt = new report();
	// comprobamos el título
	if(!$tmp = $rpt->checkTitulo($_POST["tit"]))
		$extra = "?ch=0";
El comienzo de la clase report() es:

Código:
class report{
	var $Id = 0;
	var $detail = false;
	var $Arr_error = array();
	var $conec = "";
	var $Debug;
	
	
	function report($id=""){
		require_once("conn.php");
		$this->conec = &new conn;
	}
	
	function checkTitulo($tit){
		if(!empty($tit)){
			$sql = "SELECT idp FROM libros WHERE titulo = '".$tit."' LIMIT 0,1";
			$res = $this->conec->query($sql);
			if($this->conec->NumeroReg($res)>0){
				$row = $this->conec->fetch($res);
				return $row["idPaginas"];
			}
			else
				return false;
		}
		else
			return false;
	}
}
Parte del código de la clase conexión es:
Código:
class conn{
	  var $Servidor="el_que_sea";
	  var $Login="el_que_sea"
	  var $Pass="el_que_sea";
	  var $Basedatos="el_que_sea";
	  var $Deb;
	  var $conex;

	function conn(){
	    if ( $this->$conex = @mysql_connect($this->Servidor,$this->Login,$this->Pass) )
	    {
			if(!@mysql_select_db($this->Basedatos,$this->Cnx) )
	        {
				$this->Deb = "error al seleccionar la Base de Datos<br />";
				$this->Error();
	        }
	    }
	    else
	    {
			$this->Deb = "Imposible conectarse a MySQL <br />";
			$this->Error();
	    }
	}
	function query($Sql){
	    If ( $res = @mysql_query($Sql, $this->Cnx) ){
			return $res;
	    }
	    Else{
			$this->Deb .= "<strong>PROBLEMA</strong>:(".@mysql_errno($this->Cnx).")<br />".@MySQL_error($this->Cnx)."<br />";
			$this->Error();
	    }
	}
	function Error(){
		// actuamos en consecuencia
	}
Muchas gracias por la ayuda y siento que me haya quedado tan largo el post
__________________
http://www.nosoynadie.net/