Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP OO PDO::FETCH_ASSOC de fetchall me devuelve error

Estas en el tema de PDO::FETCH_ASSOC de fetchall me devuelve error en el foro de PHP en Foros del Web. De acuerdo con el manual de PHP, el PDOstatement fetchAll admite 3 parámetros, de los cuales los dos últimos son opcionales dependiendo del primer parámetro. ...
  #1 (permalink)  
Antiguo 28/02/2015, 06:09
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años
Puntos: 84
PDO::FETCH_ASSOC de fetchall me devuelve error

De acuerdo con el manual de PHP, el PDOstatement fetchAll admite 3 parámetros, de los cuales los dos últimos son opcionales dependiendo del primer parámetro.

Estoy intentando que fetchAll me duelva un array indexado y no un mix de asociativo e indexado que es lo que devuelve por defecto (para quitar duplicidad de datos y que el sistema no este tan cargado sin tener por qué).

Código PHP:
Ver original
  1. <?php
  2. public function read($statement) {
  3.         $result = $this->pdo->prepare($statement);
  4.         $result->execute();
  5.         //esta es la linea 32 de connectdb.php, donde se produce el error
  6.         return $result->fetchAll(PDO::FETCH_ASSOC);
  7.     }
  8. ?>

Cuando aplico el código anterior sin el parámetro PDO::FETCH_ASSOC me devuelve efectivamente todos los resultados de hacer un SELECT * FROM users.

Pero cuando utilizo el parámetro PDO::FETCH_ASSOC me devuelve el siguiente error

Cita:
exception 'LogicException' with message 'Class core\PDO could not be loaded' in /srv/www/htdocs/blog/core/connectdb.php:32 Stack trace: #0 /srv/www/htdocs/blog/core/connectdb.php(32): spl_autoload('core\\PDO') #1 /srv/www/htdocs/blog/controller/module.php(13): core\ConnectDb->read('SELECT * FROM u...') #2 /srv/www/htdocs/blog/index.php(63): controller\Module->invoke(Array) #3 {main}
He leído sobre el fetchAll, inclusive los ejemplos, pero no logro encontrar nada que me haga ver el error cuando todo está según el manual :S

¿Alguien puede ayudarme?
__________________
Ayúdame a hacerlo por mi mismo.
  #2 (permalink)  
Antiguo 28/02/2015, 13:24
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: PDO::FETCH_ASSOC de fetchall me devuelve error

¿Estás usando namespaces?

Recuerda que para volver al namespace inicial debes usar \ al inicio, si no, intentará buscar dicha clase dentro del namespace actual.

Código PHP:
Ver original
  1. // MAL
  2. PDO::FETCH_ASSOC;
  3.  
  4. // BIEN
  5. \PDO::FETCH_ASSOC;

Lo digo porque tu mensaje de error lo dice bien claro:
Cita:
spl_autoload('core\\PDO')
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 28/02/2015, 13:50
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años
Puntos: 84
Respuesta: PDO::FETCH_ASSOC de fetchall me devuelve error

Tienes razón, definiendo el namespace funcionó correctamente, ¿pero PDO::FETCH_ASSOC por qué necesita ser puesto cómo namespace raíz (\) del spl_autload_register() si se está ejecutando dentro de un namespace y por qué un parámetro cómo ese necesita namespace si no estoy llamando a ninguna función o clase, sino que es un parámetro implícito de fetchAll? Tendría sentido que la clase PDO sí necesitara namespace, pero ¿un parámetro? :S

Muchísimas gracias pateketrueke :D
__________________
Ayúdame a hacerlo por mi mismo.
  #4 (permalink)  
Antiguo 28/02/2015, 15:26
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: PDO::FETCH_ASSOC de fetchall me devuelve error

A eso que le llamas "parámetro" no lo es, es en realidad una constante de clase, no una constante global.

Por ende, para utilizarse primero debe ser localizada dentro de una namespace, ejemplo:
Código PHP:
Ver original
  1. namespace A {
  2.   class B {
  3.     const C = 'OK';
  4.   }
  5. }

Entonces accedes a esto así:
Código PHP:
Ver original
  1. echo \A\B::C; // OK

¿Se entiende la razón?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 28/02/2015, 18:03
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años
Puntos: 84
Respuesta: PDO::FETCH_ASSOC de fetchall me devuelve error

Ahh, ahora entiendo mejor. Muchas gracias pateketrueke.
__________________
Ayúdame a hacerlo por mi mismo.

Etiquetas: devuelve, select
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 13:36.