![]() |
ActiveTable con PDO. Error de configuración? Saludos a todos, estos días estoy empezando a programar con el patrón MVC, basándome en los ejemplos que GatorV ha dejado en su blog: patrón ActiveTable y ActiveRecord, PDO con singleton (Aprovecho para sumar una felicitación a su trabajo). Pues bien, para empezar a entender como funciona he copiado el código de las clases ActiveTable y ActiveRecord, las clases Automovil y Automoviles, la clase DB (que extiende PDO) y he creado una clase Config para los datos de la BD. Y tras empezar a probar todo el código juntito me da desgraciadamente hasta el momento tres errores que no consigo entender. Quizá alguno de vosotros, o el propio GatorV me pueda ayudar. El primer error fue en la clase DB, en la siguiente línea: Código PHP: Fatal error: Call to undefined method DB::setAtribute() Estube mirando por internet y me encontré que este tipo de método solo funciona utilizando MySQL 4.x. ¿Alguno confirma que es así? Al final lo que hice fue comentar la línea y dejarlo correr. El segundo error que encontré fue en ActiveTable, en el método setup(): Código PHP: Call to a member function execute() on a non-object Estuve provando y si sustituyo el "?" final en $query por el valor que debería tener , en este caso Automoviles, no me da tal error. ¿Alguien sabe a qué es debido? Al final para poder seguir probando el código dejé Automoviles fijo, pero sería interesante poder poner el "?" para que la ActiveTable funcione con otras clases. El tercer error con el que me encontré fue también en el método setup del ActiveTable. Código PHP: Aquí el problema me lo encuentro en el while, ya que $command->fetch no devuelve ninguna fila, y no entiendo por qué, ya que en la base de datos tengo como mínimo un registro coche, y el nombre de la tabla corresponde a "Automoviles", como la clase. ¿Alguien cree saber a qué se debe? He pensado que quizá se deba a la configuración de mi PDO en el servidor, pero no estoy seguro porque no dispongo de la posibilidad de cambiarlo. Gracias de antemano por la ayuda. Espero haber sabido explicar bien mis problemas. |
Re: ActiveTable con PDO. Error de configuración? Cita:
setAttribute Cita:
Cita:
Código PHP: Código PHP: Saludos. |
Re: ActiveTable con PDO. Error de configuración? Antes que nada, gracias GatorV por tu respuesta :-) Respecto al error 1, ¡correcto! Ese era el problema. Ya está solucionado. Ahora tras solventar éste, me sale un nuevo error que diría se relaciona con el error 2 que comentaba más arriba: Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1' in ->ruta física al archivo y linia<-, dónde dicha línea es: Código PHP: Código PHP: He estado mirando la página de pdo->prepare en php.net y he probado esta otra forma de hacerlo: Código PHP: Si pruebo de poner la tabla "Automoviles" como hacía antes, sí que prepara correctamente la declaración, pero luego me encuentro con un error al hacer: Código PHP: Al haber resuelto el problema con setAttribute el objeto PDO me lanza excepciones que antes no lanzaba. Creo que tiene pinta de ser un problema de configuración, que afecta tanto al método prepare como al fecth. He googleado un poco buscando sobre estos números de error y lo único que he encontrado ha sido con el tema de la codificación (yo utilizo UTF-8) pero tras cambiar mi dreamweaver a Europeo Occidental sigo con el mismo problema. Estoy estancado. ¿A alguien se le ocurre algo? Gracias por la ayuda. |
Re: ActiveTable con PDO. Error de configuración? Muy raro, no entiendo porque te pasa ese error, haz intentado probarlo via local? Puede que sea un problema de configuracion en algun lado ya que los comandos deberian de funcionar, pero si no te deja puedes preparar el query tu solo: Código PHP: |
Re: ActiveTable con PDO. Error de configuración? Gracias de nuevo GatorV. Con el código que me indicas consigo solventar el problema con el prepare(), pero me sigue dando el error cuando llega al fetch(). No lo he probado vía local, pero intentaré hacerlo lo antes posible. En cuanto saque conclusiones lo posteo aquí. Gracias de nuevo por tu interés. Si alguien tiene idea de qué puede estar pasando, su ayuda será bien recibida. Gracias! Un saludo! |
Re: ActiveTable con PDO. Error de configuración? Tengo la enorme satisfacción de anunciar que ya me funciona. Al final he decidido cambiarlo de servidor. Las características del nuevo comparado con el otro son: Servidor antiguo: unix PHP 5.1.6 MySQL 5.037 Servidor nuevo: unix PHP 5.2.1 MySQL 5.037 Los métodos fetch() y prepare() funcionan correctamente, pero el execute() me sigue dando problemas con los "?" en la sentencia SQL, así que he seguido la sugerencia de GatorV de más arriba y usar sprintf(). Durante mi investigación he encontrado un problema parecido, cuya solución no ha servido para mí, pero que quizá ayude a otros: Error PDO::Statement->execute() Un cordial saludo! |
Re: ActiveTable con PDO. Error de configuración? La verdad este post lo encuentro de gran ayuda, cuando recién arranque a leer sobre el patrón MVC el ejemplo del bolg de GatorV me fue de gran ayuda, aunque había tenido los mismo problemas que Seixas, y nunca me llego a funcionar correctamente. Cuando este con tiempo nuevamente voy a probar las cosas que han comentado. Saludos! |
Re: ActiveTable con PDO. Error de configuración? Hola leyendo la internet y probando ciertos framewoks pude conocer todo esto de ACTIVERECORD y ACTIVE TABLE, pero por mas que he querido implementar lo que se propone en el blog y en este post no me ha funcionado, he echo lo que se ha descrito y todo la unica diferencia es mi BASe de datos pues es POSTGRES 8.0 en ves de MYSQL y me arroja un error a la hora de consultar los datos iniciales de la tabla es decir : Armo la cadena a consultar sin problemas pero me sale error a la hora de leer las propiedades de la tabla. Código: // Instancia de Objeto PDOLa verdad me interesa poder implementar una clase ACTIVERECORD y ACTIVETABLE sin necesidad de estar amarrado un framework en especial. Hasta el momento ya tengo armada la arquitectura del sitio ( un manejador de errores - un manejador de Conexiones"PDO" - Plantillas"Smarty") implementando el Modelo Vista Controlador MVC y quería poder usar ACtiveRecord en el y asi no utilizar procedimientos almacenados o funciones en mi Base de datos y dejar la generación del código de las consultas a el PHP. o si pueden darme alguna sugerencia de que puedo hacer para hacer mucho mas Agil el desarrollo de aplicaciones utilizando modelos de programación acepto cualquier idea o sugerencia. |
Re: ActiveTable con PDO. Error de configuración? El error no es de PHP, mas bien es que PostgreSQL no soporta el comando SHOW FIELDS FROM table, lo que debes de hacer es uno de dos cosas: 1.- Usar pg_class para obtener el meta info, te dejo este link: http://www.alberton.info/postgresql_meta_info.html, con eso podras sacar las columnas de tu tabla y encontrar el primary key. 2.- Inyectar manualmente el nombre/tipo de tus columnas en la clase para que a la hora de insertar PHP sepa que columnas usar. Saludos. |
Respuesta: ActiveTable con PDO. Error de configuración? Hola. Quisiera saber si lograron solucionar los problemas mencionados, ya que me topé con los mismos y no he podido hacer funcionar ActiveTable y ActiveRecord. (también seguí el artículo del blog de GatorV). Probé en dos servidores distintos, uno con PHP 5.2.1 y Mysql 5.0.37 y el otro con PHP 5.2.6 y Mysql 5.0.51. Las tablas y/o indices deben ser creadas con alguna característica en particular??.. Por cierto, GatorV, gracias a tus artículos, ya tengo mi clase extendida de PDO con singleton implementada. :D Saludos. |
Respuesta: ActiveTable con PDO. Error de configuración? Probando algunas cosas, me di cuenta que hay dos errores. El primero tiene relación con la preparación de la consulta tal como lo dijeron antes. Ya que si ingreso manualmente el nombre de la tabla, realiza la operación. Luego, el segundo, me indica que no encuentra la clave primaria de la tabla que consulta. Ya que hice lo siguiente : /* Comente este bloque ************************* if( $field['Key'] === "PRI" ) { $primary = $field['Field']; } *************************/ // Y asigno el nombre del id de forma manual... con eso trabaja sin problemas, cero error. $primary = 'idTabla'; Con esa información quizá sea más simple saber el porque del segundo error. Saludos. |
Respuesta: ActiveTable con PDO. Error de configuración? Bueno, el segundo error ya lo solucioné haciendo el cambió indicó GatorV de reemplazar while( $row = $command->fetch() ) { Por while( $field = $command->fetch() ) { Ahora, volviendo al primero, error que arroja es: Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; Y la documentación de Mysql indica : Error: 1064 SQLSTATE: 42000 (ER_PARSE_ERROR) Voy a seguir tratando de encontrar alguna solución... Saludos ! |
Respuesta: ActiveTable con PDO. Error de configuración? Hola claudiosalazarb, Tiene mucho que no mantengo el ejemplo básico de PDO, te recomiendo que te mudes a algo más mantenido, como Zend_Db_Table. Saludos. |
| La zona horaria es GMT -6. Ahora son las 05:21. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.