Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP OO Guardar datos de consulta en un Array

Estas en el tema de Guardar datos de consulta en un Array en el foro de PHP en Foros del Web. Buenos días, Estoy haciendo un curso de desarrollo de Aplicaciones Wed Dinamicas, actualmente estoy con PHP y Mysql. Tengo algunos problemillas para contactar con los ...
  #1 (permalink)  
Antiguo 12/08/2015, 06:01
 
Fecha de Ingreso: agosto-2015
Ubicación: Santiago de Compostela
Mensajes: 8
Antigüedad: 8 años, 8 meses
Puntos: 1
Pregunta Guardar datos de consulta en un Array

Buenos días,

Estoy haciendo un curso de desarrollo de Aplicaciones Wed Dinamicas, actualmente estoy con PHP y Mysql. Tengo algunos problemillas para contactar con los profesores.... dejemoslo ahí.

La conexión a mysql la estoy realizando con PDO.

El tema es que llego a hacer las consultas y demas, pero no llego a entender como almacenar el array que devulve la conulta en un array PHP para luego poder manipular esos datos con PHP.
Por ejemplo ( parte del codigo de ejemplo del curso):

public static function getMembers( $startRow, $numRows, $order ) {
$conn = parent::connect();
$sql = "SELECT SQL_CALC_FOUND_ROWS * FROM " . TBL_MEMBERS . " ORDER BY $order LIMIT :startRow, :numRows";

try {
$st = $conn->prepare( $sql );
$st->bindValue( ":startRow", $startRow, PDO::PARAM_INT );
$st->bindValue( ":numRows", $numRows, PDO::PARAM_INT );
$st->execute();
$members = array();
foreach ( $st as $row ) {
print_r($row);
}

Disculpas por la pregunta tan tonta y muchas gracias!
  #2 (permalink)  
Antiguo 12/08/2015, 06:17
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Guardar datos de consulta en un Array

Cita:
Iniciado por jabierreym Ver Mensaje
[...]
Estoy haciendo un curso de desarrollo de Aplicaciones Wed Dinamicas, actualmente estoy con PHP y Mysql. Tengo algunos problemillas para contactar con los profesores.... dejemoslo ahí.
[...]
Hola jabierreym,

Dinos que curso es para no cogerlo...

Es broma.

Cita:
[...] pero no llego a entender como almacenar el array que devulve la conulta en un array PHP [...]
A ver, en teoría la consulta en si debería de darte como resultado un array si así lo indicas.

Si le das un vistazo aquí: http://php.net/manual/es/pdostatement.execute.php podrás ver que execute() da como resultado según el manual PHP:
Cita:
Devuelve TRUE en caso de éxito o FALSE en caso de error.
Por lo tanto faltaría obtener los resultados a través de fetch, fetchAll, etc.

En la web de PHP podrás encontrar toda la info y ejemplos.

Prueba y comentanos los problemas que te vas encontrando.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #3 (permalink)  
Antiguo 12/08/2015, 07:07
 
Fecha de Ingreso: agosto-2015
Ubicación: Santiago de Compostela
Mensajes: 8
Antigüedad: 8 años, 8 meses
Puntos: 1
Respuesta: Guardar datos de consulta en un Array

Muchas gracias por responder,

Tambien he probado con fetchcAll, tanto si lo hago como os habia enviado como con fetchAll me devuelve corrctamente el ARRAY. El problema es que no se como seguir, relmente con esto ya tengo el Array:

Array ( [id] => 8 [0] => 8 [username] => aaa [1] => aaa [password] => *A4B6157319038724E3560894F7F932C8886EBFCF [2] => *A4B6157319038724E3560894F7F932C8886EBFCF [firstName] => ASASA [3] => ASASA [lastName] => ASASA [4] => ASASA [joinDate] => 2015-08-05 [5] => 2015-08-05 [gender] => m [6] => m [favoriteGenre] => crime [7] => crime [emailAddress] => AAS [8] => AAS [otherInterests] => SASA [9] => SASA ) Array ( [id] => 6 [0] => 6 [username] => bigbill [1] => bigbill [password] => *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4 [2] => *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4 [firstName] => Bill [3] => Bill [lastName] => Swan [4] => Swan [joinDate] => 2007-06-11 [5] => 2007-06-11 [gender] => m [6] => m [favoriteGenre] => nonFiction [7] => nonFiction [emailAddress] => [email protected] [8] => [email protected] [otherInterests] => Tennis, judo, music [9] => Tennis, judo, music )

Pero para trabajar con estos datos deberia almacenarlo en un ARRAY PHP, no?


Os pongo todo el codigo del ejercicio. Es un ejemplo y lo que estoy intentando hacr es descifrar como funcona. Al estar escrito con Clases me cuesta un poco entenderlo por eso queria intentar hacerlo de una forma más rudimentaria para seguir...

DataObject.php


<?php

require_once "config.php";

abstract class DataObject {

protected $data = array(
"id" => "",
"username" => "",
"password" => "",
"firstName" => "",
"lastName" => "",
"joinDate" => "",
"gender" => "",
"favoriteGenre" => "",
"emailAddress" => "",
"otherInterests" => ""
);

public function __construct( $data ) {
foreach ( $data as $key => $value ) {
if ( array_key_exists( $key, $this->data ) ) $this->data[$key] = $value;
}
}

public function getValue( $field ) {
if ( array_key_exists( $field, $this->data ) ) {
return $this->data[$field];
} else {
die( "Field not found" );
}
}

public function getValueEncoded( $field ) {
return htmlspecialchars( $this->getValue( $field ) );
}

protected function connect() {
try {
$conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
$conn->setAttribute( PDO::ATTR_PERSISTENT, true );
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
} catch ( PDOException $e ) {
die( "Connection failed: " . $e->getMessage() );
}

return $conn;
}

protected function disconnect( $conn ) {
$conn = "";
}
}

?>

Member.class.php

<?php

require_once "DataObject.class.php";

class Member extends DataObject {



private $_genres = array(
"crime" => "Crime",
"horror" => "Horror",
"thriller" => "Thriller",
"romance" => "Romance",
"sciFi" => "Sci-Fi",
"adventure" => "Adventure",
"nonFiction" => "Non-Fiction"
);

public static function getMembers( $startRow, $numRows, $order ) {
$conn = parent::connect();
$sql = "SELECT SQL_CALC_FOUND_ROWS * FROM " . TBL_MEMBERS . " ORDER BY $order LIMIT :startRow, :numRows";

try {
$st = $conn->prepare( $sql );
$st->bindValue( ":startRow", $startRow, PDO::PARAM_INT );
$st->bindValue( ":numRows", $numRows, PDO::PARAM_INT );
$st->execute();
$members = array();
foreach ( $st->fetchAll() as $row ) {
print_r($row);
}
$st = $conn->query( "SELECT found_rows() AS totalRows" );
$row = $st->fetch();
parent::disconnect( $conn );
return array( $members, $row["totalRows"] );
} catch ( PDOException $e ) {
parent::disconnect( $conn );
die( "Query failed: " . $e->getMessage() );
}
}

public static function getMember( $id ) {
$conn = parent::connect();
$sql = "SELECT * FROM " . TBL_MEMBERS . " WHERE id = :id";

try {
$st = $conn->prepare( $sql );
$st->bindValue( ":id", $id, PDO::PARAM_INT );
$st->execute();
$row = $st->fetch();
parent::disconnect( $conn );
if ( $row ) return new Member( $row );
} catch ( PDOException $e ) {
parent::disconnect( $conn );
die( "Query failed: " . $e->getMessage() );
}
}

public function getGenderString() {
return ( $this->data["gender"] == "f" ) ? "Female" : "Male";
}

public function getFavoriteGenreString() {
return ( $this->_genres[$this->data["favoriteGenre"]] );
}
}

?>
  #4 (permalink)  
Antiguo 12/08/2015, 07:59
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Guardar datos de consulta en un Array

Cita:
Iniciado por jabierreym Ver Mensaje
[...]
Pero para trabajar con estos datos deberia almacenarlo en un ARRAY PHP, no?
[...]
Nop, lo que ves en pantalla ya es un array de php, lo que te queda por hacer es representar ese array de forma que cualquier humano lo entienda

Esa salida te la está dando la funcion getMembers($startRow, $numRows, $order) a través de print_r($row).

El array lo contiene la variable $row que procesa el foreach
Código PHP:
foreach($st->fetchAll() as $row)
{
    
print_r($row);

Aunque somos muy repetitivos, el manual de PHP resuelve muchisimas dudas.

Dale un vistazo al tema de los arrays para entender como funcionan, como se estructuran y como se gestiona su contenido.
http://php.net/manual/es/language.types.array.php

También a las funciones para tratarlos:
foreach, for, while

Como consejo, pruebalo primero fuera de las clases, conseguirás entenderlo mejor.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #5 (permalink)  
Antiguo 12/08/2015, 08:32
 
Fecha de Ingreso: agosto-2015
Ubicación: Santiago de Compostela
Mensajes: 8
Antigüedad: 8 años, 8 meses
Puntos: 1
Respuesta: Guardar datos de consulta en un Array

Ok,

Entendido, seguire consultando php.net.

Hay una cosa que os he pasado mal, en el ejercicoo original no hay print_r($row) esto lo habia añadido yo para ver que devolvia, en su lugar crea un objeto $members[] = new Member( $row );

Lo que llego a entender es que crea un objeto de cada fila devuelta y lo almacena en un array, a traves del metodo constructode DataObject:


public function __construct( $data ) {
foreach ( $data as $key => $value ) {
if ( array_key_exists( $key, $this->data ) ) $this->data[$key] = $value;
}
}

Esto es realmente lo que me lia y no entiendo muy bien porque lo hacen así!!!

Esto es lo que se escapa un poco a mis conocimientos, que son como veis limitados. Nunca habia visto que se podía crear un objeto de una clase dentro de la misma clase!!

Muchas gracias por la ayuda.
  #6 (permalink)  
Antiguo 12/08/2015, 08:38
 
Fecha de Ingreso: agosto-2015
Ubicación: Santiago de Compostela
Mensajes: 8
Antigüedad: 8 años, 8 meses
Puntos: 1
Respuesta: Guardar datos de consulta en un Array

Por cierto, lo de php.net lo estoy consultando, los conceptos los entiendo correctamente pero en el momento de utilizar el array devuelto de mysql es donde surgen las dudas. Buenos poco a poco.

Gracias,
  #7 (permalink)  
Antiguo 12/08/2015, 09:51
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Guardar datos de consulta en un Array

Cita:
Iniciado por jabierreym Ver Mensaje
[...]
Lo que llego a entender es que crea un objeto de cada fila devuelta y lo almacena en un array, a traves del metodo constructode DataObject:
[...]
Mas bien usa los objetos para tratar los datos del array, la funcion que comentas lo único que hace es comprobar si existe la key en un array, si es así le añade un valor dado.

Las clases son confusas en mismas, y si no se documentan, y además se hacen un poco "enrevesadas", pues cuesta más aún entender su funcionamiento.

Si te fijas, la clase Member, se usa a si misma mediante $members[] = new Member( $row );, para usar un constructor que está en la clase que extiende... Que al ser abstracta es como debería ser, pero en este caso poco sentido tiene hacerlo así.

Este tipos de cosas hace que el aprendizaje sea aun mas lento.

Suerte con el curso, y cualquier cosa, por aquí estamos.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #8 (permalink)  
Antiguo 12/08/2015, 10:15
 
Fecha de Ingreso: agosto-2015
Ubicación: Santiago de Compostela
Mensajes: 8
Antigüedad: 8 años, 8 meses
Puntos: 1
Respuesta: Guardar datos de consulta en un Array

Muchas gracias,

De verdad que me estaba rompiendo la cabeza que no veas, pero queria entenderlo aunque luego no lo haga así.

Me has ayudado mucho.

Y el curso.... prefiero no decir donde es pero es una autentica verguenza. Y con lo que me ha costado...

Buenos muchas gracias por la ayuda.

Etiquetas: php+arrays
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:14.