Foros del Web » Programando para Internet » PHP »

clases

Estas en el tema de clases en el foro de PHP en Foros del Web. Estimados amigos. Tengo una clase para conectar a una base de datos y casi funciona. Código PHP: class  mysql  { var  $base = "mibase" ; ...
  #1 (permalink)  
Antiguo 09/08/2004, 02:43
 
Fecha de Ingreso: agosto-2003
Mensajes: 43
Antigüedad: 20 años, 7 meses
Puntos: 0
clases

Estimados amigos.
Tengo una clase para conectar a una base de datos y casi funciona.
Código PHP:
class mysql {
var 
$base="mibase";
var 
$servidor="localhost";
var 
$usuario="user";
var 
$clave ="clave";
var 
$conexion="";
var 
$consulta="";

function 
conectar () {
 
$user=$this->usuario;
 
$pass=$this->clave;
 
$server=$this->servidor;
 
$base=$this->base;

 
$conecta=mysql_connect($server,$user,$pass);
 
mysql_select_db($base,$conecta);
 
$this->conexion=$conecta;
 return 
true;
}
function 
consultar ($sql="") {
 
$conecta=$this->conexion;
 
$result=mysql_query($sql,$conecta);
 
$this->consulta=$result;
 return 
true;
}
function 
numero() {
 
$conecta=$this->conexion;
 
$result=$this->consulta;
$num=mysql_num_rows($result);
return 
$num;
}
function 
resultado() {
 
$conecta=$this->conexion;
 
$result=$this->consulta;
while (
$row=mysql_fetch_assoc($result)) {
 return 
$row;
}
mysql_free_result($result);
}
//final de la clase

En la página de resultados.php llamo a la clase
Código PHP:
include_once('clase.php');
$mysql = new mysql();
$mysql->conectar();
$mysql->consultar("select * from productos");
$res=$mysql->resultado();
echo
"$res[nombre_producto]<br>"
Pues vamos a ver:
1º.- En el resultado de la consulta echo"$res[nombre_producto]"; sólo sale un resultado (hay 10 filas en la base de datos).
2º.- ¿Hay alguna forma de evitar tanto $mysql->...... Es decir, poner algo aí como:
Código PHP:
include_once('clase.php');
$mysql=new mysql();
$result=consultar("select * from productos);
$productos=resultado($result);
echo"
$productos[nombre_producto]<br>"; 
Es decir, simplificar el código un poco.
__________________
pwmcorg
  #2 (permalink)  
Antiguo 09/08/2004, 06:09
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

El problema es que en resultado() estas metiendo el return dentro de un bucle. Y return sale de la funcion en su primera ejecucion, asi que solo devuelve el primer registro.

La solucion seria implementar resultado() para que funcione de la misma forma que mysql_fetch_assoc(), quedando algo como:
Código PHP:
function resultado() {
  return 
mysql_fetch_assoc($this->consulta);

Y se llamaria como a mysql_fetch_assoc(), con un while.

Otra opcion seria que resultado() almacenase todo el recordset en un array y devolviese ese array, algo como:
Código PHP:
function resultado() {
  
$registros=array();
  while (
$row=mysql_fetch_assoc($this->consulta)) {
    
$registros[]=$row;
  }
  return 
$registros;

Y luego al recoger el array se podria recorrer con un foreach:
Código PHP:
$res=$mysql->resultado();
foreach (
$res as $row) {
  echo
"$row[nombre_producto]<br>";

Sobre la simplificacion del codigo, me temo que no hay forma de evitar poner el objeto.

saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
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 15:05.