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

Funcion sin funcionar :S ?

Estas en el tema de Funcion sin funcionar :S ? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Saludos cordiales, esto es una duda algo muy raro que si bien tengo soluciones alternas quisiera aclarar esta incognita, Me explico, tengo 2 clases, 1 ...
  #1 (permalink)  
Antiguo 26/02/2011, 04:50
 
Fecha de Ingreso: diciembre-2009
Mensajes: 56
Antigüedad: 14 años, 4 meses
Puntos: 0
Funcion sin funcionar :S ?

Saludos cordiales, esto es una duda algo muy raro que si bien tengo soluciones alternas quisiera aclarar esta incognita,

Me explico, tengo 2 clases, 1 que conecta a la DB llamada Conexion.php y otra que maneja las consultas llamada ManejadorDB.php

class conexion {

private $host = "localhost";

private $database = "";
private $username = "";
private $password = "";
private $link;
private $result;
public $sql;


function __construct($database=""){

if (!empty($database)){ $this->database = $database; }

$this->link = mysql_connect($this->host,$this->username,$this->password);

mysql_select_db($this->database,$this->link);

return $this->link;



}


function EjecutarSQL($sql){

if (!empty($sql)){

$this->sql = $sql;

$this->result = mysql_query($sql,$this->link) or die(mysql_error()."error en EJECUTAR<br /><br />".$sql);

return $this->result;

}else{

return false;

}

}
function fetch($result=""){

if (empty($result)){ $result = $this->result; }

return mysql_fetch_array($result);

}
}


la segunda es:
A esta le paso como atributo el nombre de cualquier tabla de mi db, la clase contiene varios metodos(insertar, actualizar, borrar , consultar etc )obviare los demas y les mostrare solo 2 de ellos que se llaman consulta() y arrayConsulta(). detallando:

class ManejadorDB{

private $_db;
protected $_tabla = "";


function __construct($tabla){
$this->_db = new conexion();
$this->_tabla = $tabla;
}

public function consulta()
{
$this->query; //publico
$this->cad; //publico
$sql = $this->_db->EjecutarSQL(" $this->query from $this->_tabla where 1 $this->cad ");

//return " $this->query from $this->_tabla where 1 $this->cad ";
return $sql;

$this->_db->free_result($sql) or die(mysql_error());
}


// REVISAR...... :(
public function arrayConsulta(){
$this->query;
$this->cad;
$sql = $this->_db->EjecutarSQL(" $this->query from $this->_tabla where 1 $this->cad ");
if ($this->consulta()){
while($fila = $this->_db->fetch($sql)) {
$todo[] = $fila;
}
}

}

}

.....probando la clase con cualquier tabla digamos tabla persona (que ndría 2 campos: nombre y edad )



$Obj = new ManejadorDB("sar_vdr");


$Obj->query= "select nombre, edad"; //solo seleccion el nombre
$ObjSar->cad = " and edad >'15' "; //

$sql = $ObjSar->consulta(); // esto funciona bien, me trae la consulta y puedo maniobrar,


Lo que no entiendo porque este metodo me devuelve vacio y es que :
$fila = $ObjSar->arrayConsulta();


public function arrayConsulta(){
$this->query;
$this->cad;
$sql = $this->_db->EjecutarSQL(" $this->query from $this->_tabla where 1 $this->cad ");
if ($this->consulta()){
while($fila = $this->_db->fetch($sql)) {
$todo[] = $fila;
}
}
return $todo;

}


El metodo arrayConsulta() funciona bien , LA DUDA ESTA EN ESTA LINEA:

// he puesto $sql que viene del metodo consulta()

while($fila = $this->_db->fetch($sql)) { //AQUI DUDA

PORQUE NO ES CORRECTO PONER ESTO??

while($fila = $this->_db->fetch($this->consulta()) { //???

esa es mi duda porque cuando hago me sale error como este:
Fatal error: Allowed memory size of 25165824 bytes exhausted (tried to allocate 264 bytes) in I:\AppServ\www\idip\idip\controles\clases\Conexion .php on line 125
  #2 (permalink)  
Antiguo 26/02/2011, 07:40
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Funcion sin funcionar :S ?

Creo que vas a tener que colocar completo el codigo y entre el Highlight del foro o entre las etiquetas PHP de manera que se entienda mejor el codigo que colocastes, pero revisando un poco las preguntas que haces
Cita:
while($fila = $this->_db->fetch($sql)) { //AQUI DUDA

PORQUE NO ES CORRECTO PONER ESTO??
Sencillamente porque $sql no esta dentro del ambito de esta funcion ya que pertenece es al metodo consulta(); que tendrias que hacer o cargarlo en un atributo de la clase o llamar a al metodo consulta en tu metodo arrayConsulta para obtener el resultado de este, aunque como me indicaron cuando comence a crear una clase para conexion creo que para estas es mejor utilizar PDO ya que viene con el PHP y puedes extender tu clase directamente de esta.

Otra cosa, atributos publicos que declaraste creo que estarian mejor si los pasas como parametro del metodo (opinion personal) de tal manera que no puedan acceder a ellos directamente ya que esto no es muy recomendable, solo son algunas sugerencias si se me paso algo espero que otro compañero te lo indique, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #3 (permalink)  
Antiguo 09/03/2011, 18:51
 
Fecha de Ingreso: diciembre-2009
Mensajes: 56
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Funcion sin funcionar :S ?

Cita:
Iniciado por carlos_belisario Ver Mensaje
Creo que vas a tener que colocar completo el codigo y entre el Highlight del foro o entre las etiquetas PHP de manera que se entienda mejor el codigo que colocastes, pero revisando un poco las preguntas que haces


Sencillamente porque $sql no esta dentro del ambito de esta funcion ya que pertenece es al metodo consulta(); que tendrias que hacer o cargarlo en un atributo de la clase o llamar a al metodo consulta en tu metodo arrayConsulta para obtener el resultado de este, aunque como me indicaron cuando comence a crear una clase para conexion creo que para estas es mejor utilizar PDO ya que viene con el PHP y puedes extender tu clase directamente de esta.

Otra cosa, atributos publicos que declaraste creo que estarian mejor si los pasas como parametro del metodo (opinion personal) de tal manera que no puedan acceder a ellos directamente ya que esto no es muy recomendable, solo son algunas sugerencias si se me paso algo espero que otro compañero te lo indique, saludos

ES Algo tarde pero gracias por responder, y efectivamente el error iba por ese lado, la variable en otro ambito, cuando me di cuenta de ese error me dije soy un est-.... jajja en fin

saludos

Etiquetas: funcion
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 11:46.