Ver Mensaje Individual
  #4 (permalink)  
Antiguo 09/06/2017, 13:36
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Mostrar resultado o mensaje

Cita:
Iniciado por bandolera Ver Mensaje
Hola. Gracias por tu respuesta tan descriptiva. Pero tengo algunas dudas:
1) En el caso del if(), en qué caso podría haber un arreglo vacío? No se supone que con el rowcount() ya se validó eso?
1.b) Pusiste:
Eso lo decides tu, es válido regresar false o un arreglo vacío.
Cita:
2) Lo último que dices que no es necesario la asignación y que deje que PDO llene los objetos. No es necesario usar el VO? A qué te refieres exactamente y cómo varía el proceso? No entendí.
Gracias.
Los métodos fetch y fetchAll pueden regresar un objeto usando le opción PDO::FETCH_CLASS esto hace que estos métodos regresen un objeto de una clase que tu indiques. El llenado del objeto se realiza usando los nombres de propiedades que sean igual a las que regresa el resultado de la consulta.

Como ejemplo voy a usar una clase sencilla que solo tiene nombre y correo el nombre de estas propiedades corresponde con los mismo nombres que se tiene en la base de datos.
Código PHP:
Ver original
  1. class User {
  2.  
  3.     private $name;
  4.  
  5.     private $email;
  6.  
  7.     public function name()
  8.     {
  9.         return $this->name;
  10.     }
  11.  
  12.     public function email()
  13.     {
  14.         return $this->email;
  15.     }
  16. }

El código que llena la clase puede ser algo como esto:
Código PHP:
Ver original
  1. try{
  2.     $dbh = new PDO($dsn, $user, $pass, $options);
  3.  
  4.     $sqlResult = $dbh->query('select * from users');
  5.     $rows = $sqlResult->fetchAll( PDO::FETCH_CLASS, User::class );
  6.  
  7.     foreach ($rows as $row) {
  8.         echo "<p>{$row->name()}</p>";
  9.         echo "<p>{$row->email()}</p>";
  10.     }
  11. }
  12.     // Catch any errors
  13. catch(PDOException $e){
  14.     $error = $e->getMessage();
  15. }
Si te das cuenta, obtuvimos un arreglo de objetos de la clase User y no tuve que asignar, llamar a métodos o crear el objeto para asignar los valores.
Te dejo como lo haces tu para que observes las diferencias:
Código PHP:
Ver original
  1. while ($fila = $stm->fetch(PDO::FETCH_ASSOC)) {
  2.     $salida[] = new ClienteVO($fila['codigo'], $fila['nombre']);
  3. }
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.