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

Como traer este array

Estas en el tema de Como traer este array en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Saludos, se que el titulo no es el adecuado pero no sabia que otro poner, me estoy inicia con la poo, y tengo este ejemplo: ...
  #1 (permalink)  
Antiguo 17/01/2013, 23:24
 
Fecha de Ingreso: julio-2010
Mensajes: 158
Antigüedad: 13 años, 10 meses
Puntos: 3
Como traer este array

Saludos, se que el titulo no es el adecuado pero no sabia que otro poner, me estoy inicia con la poo, y tengo este ejemplo:

Código:
abstract class DBAbstractModel {

	private static $db_host = 'localhost';
	private static $db_user = 'user';
	private static $db_pass = 'pass';
	protected $db_name = 'db';
	protected $query;
	protected $rows = array();
	private $conn;
	public $mensaje = 'Hecho';


	abstract protected function traer();

	private function open_connection(){
		$this -> conn = new mysqli(self::$db_host, self::$db_user, self::$db_pass, $this -> db_name);
	}

	private function close_connection() {
		$this->conn->close();
	}

	protected function execute_single_query() {
		$this->open_connection();
		$this->conn->query($this->query);
		$this->close_connection();
	}

	protected function get_results_from_query() {
		$this->open_connection();
		$result = $this->conn->query($this->query);
		while ($this->rows[] = $result->fetch_assoc());
		$result->close();
		$this->close_connection();
	}
}
y luego este

Código:
require_once('../core/db_abstract_model.php');
public function get($user_email='') {
	if($user_email != '') {
	 $this->query = "
		 SELECT id, nombre, apellido, email, clave
		 FROM usuarios
		 WHERE email = '$user_email'
	";

	 $this->get_results_from_query();
 	}

	if(count($this->rows) == 1) {
		foreach ($this->rows[0] as $propiedad=>$valor) {
			$this->$propiedad = $valor;
		}
	$this->mensaje = 'Usuario encontrado';
	} else {
		$this->mensaje = 'Usuario no encontrado';
	}
}

y para imprimir:

$usuario1 = new Usuario();
$usuario1->get('[email protected]');
print $usuario1->nombre

Hasta aqui todo entendido, pero no entiendo como hacer cuando es mas de un resultado; por ejemplo si quito el where, y listo todos los resultados me marca error al momento de querer imprimirlos, como se aria en este caso?
  #2 (permalink)  
Antiguo 18/01/2013, 00:15
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Como traer este array

No entendí muy bien lo que quieres hacer, pero me fijé exactamente en el método get_results_from_query, estás enviando el false que genera fetch_assoc, que se traduce en un elemento vacío en el array:

Código PHP:
Ver original
  1. while ($this->rows[] = $result->fetch_assoc());

No es lo mismo que hacer:

Código PHP:
Ver original
  1. while ($row = $result->fetch_assoc()) {
  2.       $this->rows[] = $row;
  3. }

Esto hace que tu condición siempre falle, ya que siempre será mayor que 1:

Código PHP:
Ver original
  1. if(count($this->rows) == 1) {

Imprimir todos los resultados? ya los tienes en $this->rows todos. cuál es tu error?
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #3 (permalink)  
Antiguo 18/01/2013, 00:25
 
Fecha de Ingreso: julio-2010
Mensajes: 158
Antigüedad: 13 años, 10 meses
Puntos: 3
Respuesta: Como traer este array

Si ya se que hay que modificar la condicion, de hecho le tengo puesto >1, bueno el problema es al momente de imprimir los resultas si hago print $usuario1->nombre; solo me trae un solo usuario y quiero que traiga el array que tiene todos los resultados.
  #4 (permalink)  
Antiguo 18/01/2013, 00:36
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Como traer este array

Quieres crear una propiedad por cada usuario? yo creo que desde ahí vas mal ya que las propiedades se sobreescriben y siempre te va a dar el último usuario. Esto no le encuentro sentido:

Código PHP:
Ver original
  1. foreach ($this->rows[0] as $propiedad=>$valor) {
  2.             $this->$propiedad = $valor;
  3. }

Te repito que $this->rows ya tiene todos tus nombres. Puedes hacer un método get para retornar esos nombres.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #5 (permalink)  
Antiguo 18/01/2013, 00:41
 
Fecha de Ingreso: julio-2010
Mensajes: 158
Antigüedad: 13 años, 10 meses
Puntos: 3
Respuesta: Como traer este array

Gracias por responder, es un ejemplo que saque de un libro, y como dije estoy empezando con eso, pero como retorno el valor?

Código:
public function get($user_email='') {
	if($user_email != '') {
	 $this->query = "
		 SELECT id, nombre, apellido, email, clave
		 FROM usuarios
		 WHERE email = '$user_email'
	";

	 $this->get_results_from_query();

 	$retorna = $this->rows[0];

return $retorna;

}

O como lo arias? Agradesco tus respuestas saludos.
  #6 (permalink)  
Antiguo 18/01/2013, 00:45
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Como traer este array

Según tus clases, un método para retornar todo sería:

Código PHP:
Ver original
  1. public function getData() {
  2.         $this->query = "
  3.          SELECT id, nombre, apellido, email, clave
  4.          FROM usuarios";
  5.        
  6.         $this->get_results_from_query();
  7.        
  8.         return $this->rows;
  9. }

y para recorrer esos nombres:

Código PHP:
Ver original
  1. $usuarios = new Usuario();
  2.  
  3. foreach ($usuarios->getData() as $usuario) {
  4.     echo $usuario['nombre'] . '<br />';
  5. }

Claro que se ve raro, una clase usuario obteniendo varios usuarios. Tu clase de ejemplo está diseñada para obtener información de un usuario.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #7 (permalink)  
Antiguo 18/01/2013, 00:54
 
Fecha de Ingreso: julio-2010
Mensajes: 158
Antigüedad: 13 años, 10 meses
Puntos: 3
Respuesta: Como traer este array

Muchas gracias, funciono pero hay algo que no entiendo, como es que en:

Código:
	protected function get_results_from_query() {
		$this->open_connection();
		$result = $this->conn->query($this->query);
		while ($this->rows[] = $result->fetch_assoc());
		$result->close();
		$this->close_connection();
	}
retorna el array de los resultados, si al final no le puse return $this->rows
  #8 (permalink)  
Antiguo 18/01/2013, 01:00
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Como traer este array

Lo que estás haciendo es llenar $this->rows[] con todos los registros que te llegan de la consulta. ¿porqué te llega esa información a la clase Usuario sin return? porque esta propiedad rows de DBAbstractModel es heredada por la clase usuario.

Te recomiendo que te leas en el manual de PHP Clases y objetos, para que entiendas más sobre la programación orientada a objetos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #9 (permalink)  
Antiguo 13/10/2015, 19:13
 
Fecha de Ingreso: octubre-2015
Mensajes: 1
Antigüedad: 8 años, 6 meses
Puntos: 0
Respuesta: Como traer este array

disculpen pero tengo una duda con respecto a la parte del codigo:
while ($this->rows[] = $result->fetch_assoc());

es como un if corto o abreviado????

y porq nuevamente se pone como arreglo si ya al declarar rows se declara como arreglo:
abstract class DBAbstractModel {

private static $db_host = 'localhost';
private static $db_user = 'user';
private static $db_pass = 'pass';
protected $db_name = 'db';
protected $query;
protected $rows = array();

Etiquetas: mysql, php, resultados, select, 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 02:42.