Foros del Web » Programando para Internet » PHP »

Error en fetch object con PDO

Estas en el tema de Error en fetch object con PDO en el foro de PHP en Foros del Web. Hoy como no tenía muchas cosas que hacer y mucho que aprender quise experimentar a abrir conexiones con PDO usando MySQL . Descomentando en el ...
  #1 (permalink)  
Antiguo 01/11/2011, 09:08
 
Fecha de Ingreso: julio-2010
Mensajes: 275
Antigüedad: 14 años, 5 meses
Puntos: 21
Error en fetch object con PDO

Hoy como no tenía muchas cosas que hacer y mucho que aprender quise experimentar a abrir conexiones con PDO usando MySQL. Descomentando en el archivo php.ini la linea extension=php_pdo_mysql.dll y encontrando este tutorial en google

Me hice un formulario sencillo, solamente con dos campos, un campo ID autoincremental y un campo nombre, solo como prueba, después de realizar una primera prueba exitosa al insertar un campo a la base de datos, quise listar los registros dentro de la misma con este código

Código PHP:
Ver original
  1. <?php
  2. /*** mysql servidor ***/
  3. $hostname = 'localhost';
  4.  
  5. /*** mysql usuario ***/
  6. $username = 'root';
  7.  
  8. /*** mysql contraseña ***/
  9. $password = '';
  10.  
  11. /*** mysql base de datos ***/
  12. $dbname='prueba';
  13.  
  14. /*** ***/
  15. $nombre=$_POST['nombre'];
  16. //echo $nombre;
  17. try
  18. {
  19.     /*** Se crea el objeto PDO***/
  20.     $dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
  21.     /*** imprime un mensaje diciendo que se ha conectado ***/
  22.     echo 'Conectado a la Base de datos';
  23.     /*** sentencia SQL ***/
  24.     $sql="insert into prueba (id,nombre) value ('','$nombre')";
  25.     /*** busca en una declaración al objeto PDO  ***/
  26.     $count=$dbh->exec($sql);
  27.     /*** numero de columnas ***/
  28.     echo $count;
  29.     /*** sentencia SQL ***/
  30.     $esecuele="select * from prueba";
  31.     /*** busca en una declaración al objeto PDO  ***/
  32.     $sentencia=$dbh->exec($esecuele);
  33.     /*** asigna el atributo para reportar errores ***/
  34.     $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  35.     /*** numero de columnas ***/
  36.         $objeto = $sentencia->fetch(PDO::FETCH_OBJECT);
  37.     /*** ciclo que recorreo el objeto  ***/
  38.     echo $objeto->id.'<br />';
  39.     echo $objeto->nombre.'<br />';
  40.  
  41.     /**** Se desconecta la conexion a la base de datos ****/
  42.     $dbh=null;
  43. }
  44. catch(PDOException $e)
  45. {
  46.     echo $e->getMessage();
  47. }

Obteniendo este grandioso mensaje
Código Error:
Ver original
  1. Fatal error: Call to a member function fetch() on a non-object in \xampp\htdocs\ejemplo\ejemplo_pdo\analizar_formulario_ejemplo.php on line 33

Si, el mensaje dice "Llamada a miembro de la funcion fetch() en un no-objeto" y bla bla bla....

Pero si la funcion fetch no debería tener ningún error, por que aparece ese grandioso error?

Última edición por Sirrohan; 01/11/2011 a las 09:21
  #2 (permalink)  
Antiguo 01/11/2011, 09:22
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Error en fetch object con PDO

Que tal Sirrohan,

Comprueba el manual a ver que te devuelve PDO::exec, lo que deberias utilizar es PDO::prepare y sobre el PDOStatement que te devuelve llamar a PDOStatement ::fetch.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 01/11/2011, 09:27
 
Fecha de Ingreso: julio-2010
Mensajes: 275
Antigüedad: 14 años, 5 meses
Puntos: 21
Respuesta: Error en fetch object con PDO

Cambiando esta sentencia $sentencia=$dbh->exec($esecuele); por esta otra sentencia $sentencia=$dbh->prepare($esecuele); quedando algo así....

Código PHP:
Ver original
  1. try
  2. {
  3.     /*** Se crea el objeto PDO***/
  4.     $dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
  5.     /*** imprime un mensaje diciendo que se ha conectado ***/
  6.     echo 'Conectado a la Base de datos';
  7.     /*** sentencia SQL ***/
  8.     $sql="insert into prueba (id,nombre) value ('','$nombre')";
  9.     /*** busca en una declaración al objeto PDO  ***/
  10.     $count=$dbh->exec($sql);
  11.     /*** numero de columnas ***/
  12.     echo $count;
  13.     /*** sentencia SQL ***/
  14.     $esecuele="select * from prueba";
  15.     $sentencia=$dbh->prepare($esecuele);
  16.     /*** busca en una declaración al objeto PDO  ***/
  17.     $sentencia->execute();
  18.     /*** asigna el atributo para reportar errores ***/
  19.     $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  20.     /*** numero de columnas ***/
  21.     $objeto = $sentencia->fetch(PDO::FETCH_OBJECT);
  22.     /*** ciclo que recorreo el objeto  ***/
  23.     echo $objeto->id.'<br />';
  24.     echo $objeto->nombre.'<br />';
  25.     /**** Se desconecta la conexion a la base de datos ****/
  26.     $dbh=null;
  27. }
Ahora me aparece
Código Error:
Ver original
  1. Fatal error: Undefined class constant 'FETCH_OBJECT'

Creo que voy mejorando ^_^
  #4 (permalink)  
Antiguo 01/11/2011, 09:35
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 8 meses
Puntos: 461
Respuesta: Error en fetch object con PDO

revisaste la documentación oficial??? http://www.php.net/manual/es/pdostatement.fetch.php, fijate que el metodo fetch no pide ningun parámetro llamado FETCH_OBJECT, para retornar el objeto te pide el PDO::FETCH_OBJ, revisa la referencia bien para que puedas darle un buen uso y sin problemas, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #5 (permalink)  
Antiguo 01/11/2011, 09:36
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Error en fetch object con PDO

No existe FETCH_OBJECT, lo más cercano es FETCH_CLASS pero tienes que indicarle que tipo de clase debe de retornarl.

Saludos
  #6 (permalink)  
Antiguo 01/11/2011, 09:44
 
Fecha de Ingreso: julio-2010
Mensajes: 275
Antigüedad: 14 años, 5 meses
Puntos: 21
Respuesta: Error en fetch object con PDO

Cita:
Iniciado por carlos_belisario Ver Mensaje
revisaste la documentación oficial??? http://www.php.net/manual/es/pdostatement.fetch.php, fijate que el metodo fetch no pide ningun parámetro llamado FETCH_OBJECT, para retornar el objeto te pide el PDO::FETCH_OBJ, revisa la referencia bien para que puedas darle un buen uso y sin problemas, saludos
Eso mismo es!! Y si la había revisado la función fetch(última línea del tema) pero no lo había escrito bien, el único que no me funcionaba era el fetch_obj

Así no se hace!!
Código PHP:
Ver original
  1. $objeto = $sentencia->fetch(PDO::FETCH_OBJECT);

Así se hace
Código PHP:
Ver original
  1. $objeto = $sentencia->fetch(PDO::FETCH_OBJ);

Gracias!

Etiquetas: fetch, formulario, html, mysql, object, pdo, registro, sql, 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 21:00.