Comunidad de diseño web y desarrollo en internet online

Duda con flex 4...

Citar            
MensajeEscrito el 24 Oct 2010 09:33 am
Hola amigos, dando molestias d nuevo.

Estoy tratando d conectarme a la base d datos del CMS d ecommerce llamado 'opencart' por medio d las nueva herramienta q trae el flex builder 4 (tipo amfp o weborb). La conexion se hizo exitosamente, pero... me esta generando varios errores al empezar a pedir datos a la base d datos (valga la redundancia), mi duda es... acaso los errores son por la seguridad d la base d datos por parte del 'opencart' o soy el del problema??

Los errores q me generan son asi:

Código :

InvocationTargetException:There was an error while invoking the operation. Check your server settings and try invoking the operation again. 

Reason: Server error MySQL Error - 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 'order where order_id=?' at line 1 #0 C:\wamp\www\opencart\pruebaopencart\services\OrderService.php(93): OrderService->throwExceptionOnError() #1 [internal function]: OrderService->getOrderByID(1) #2 [internal function]: ReflectionMethod->invokeArgs(Object(OrderService), Array) #3 C:\wamp\www\ZendFramework\library\Zend\Server\Reflection\Function\Abstract.php(368): call_user_func_array(Array, Array) #4 [internal function]: Zend_Server_Reflection_Function_Abstract->__call('invokeArgs', Array) #5 C:\wamp\www\ZendFramework\library\Zend\Amf\Server.php(356): Zend_Server_Reflection_Method->invokeArgs(Object(OrderService), Array) #6 C:\wamp\www\ZendFramework\library\Zend\Amf\Server.php(550): Zend_Amf_Server->_dispatch('getOrderByID', Array, 'OrderService') #7 C:\wamp\www\ZendFramework\library\Zend\Amf\Server.php(626): Zend_Amf_Server->_handle(Object(Zend_Amf_Request_Http)) #8 C:\wamp\www\opencart\pruebaopencart\gateway.php(69): Zend_Amf_Server->handle() #9 {main} 


Estoy un poco confundido si es un error d sintaxis mio, o el error es algo sobre seguridad, en otras ocasiones con otros lenguajes d programacion me ha tocado ver q el error d sintaxis aveces se puede tomar como error d seguridad.

Muchas gracias.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 24 Oct 2010 09:20 pm
1.- Eso indica un error de sintaxis

2.-La mejor forma de saber si es el servidor o el cliente, atraves de manejador de base de datos para mysql, resivar la sentencia (en google hay demasidos, busca uno que te agrade y ejecuta la sentencia manualmente)

3.- A veces desde flex puedes pasarle alguna parametro null eso te va generar error
select * from bla where bla=? (a veces no siempre) ?=null

4.- Que tengas conexión no significa que la sentencia o las consultas esten bien, revisalo

5.- Por último lo mejor como te dije en el 2 es que revises manualmente la consulta con algun manejador y hagas un trace
con charles debug para ver si el parametro que pasas desde el servidor hacia el cliente es correcto

Por xcom

Claber

530 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Oct 2010 09:44 pm
Gracias xcom por tu respuesta. Sabes cual es el error?!! la version d php, ya cambie varias versiones y me da diferentes errores ya q por cada version varian algunos comando d sql, tendre q excavar mas para encontrar el verdadero error :S

Gracias y saludos.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 24 Oct 2010 10:17 pm
hay señor....te digo que hagas un debug y un trace con las herramientas que posee
por lo que veo ha simple vista hay una query que ejecutas .. esa query y el error que te dice es de sintaxis
comunmente de flex (no siempre ) si pasas un paramentro nulo desde flex hacia el servidor puede generar error,
no siempre a veces versiones a veces trafico en fin por eso mejor es validar los elementos que entran y los que llegan
también.

Pero ante todo VUELVO A REPETIR, baja un manejador de base de datos para mysql en google hay demasiado
te conectas a la base de datos ejecutas la query que te da problemas .

desde el lado de un servidor haces un trace para saber cual es exactament

sql=select bla blal ablal
trace(esta el la puta query)
o log( esta es la lpueta query+"select.....)

debe tener zenfamf el manejo de log

Por xcom

Claber

530 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Oct 2010 10:19 pm
A simple vista la tabla es orden y buscas algo por el id de esa tabla

select * order where order_id=?

que sentencia o consultas ejecutas desde flex hacia esa base de datos.

Por que si te manda un error solo por conectarte a esa base de datos , es mejor que uses el manejado de base datos y verifiques

Por xcom

Claber

530 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Oct 2010 05:42 am
Gracias xcom por tus respuestas, estoy usando flex 4 y estoy utilizando su herramienta d 'autointegracion' (es ahorrarte el trabajo sucio d configurar el servicio amf) en otras ocasiones lo habia probado y todo funciona bien, d hecho todas las tablas d la base d datos del opencart funcionan excelente con el servicio, la unica tabla q no funciona con este servicio es la tabla d pedidos, lo q podria sonar algo razonable es q contiene muchas columnas, 51 para ser exactos, entonces creo q ese podria ser el problema.

En cuenta a hacer un debuger y todo lo q recomiendas, ya lo he hecho el propio flex 4 trae sus herramientas para probar una conexion sin necesidad d hacer nada mas q unos cuantos clics. Tambien me guiado con la consola d phpmyadmin.

En la consola d phpmyadmin cuando hago una 'query' y pruebo esto:

Código :

SELECT * FROM `order` WHERE order_id = 1

funciona muy bien, me arroja el registro numero 1 (q es el unico q tengo :P), ya si lo hago en flex con el codio autogenerado me manda el error q esta en mi primer mensaje.

Como t comento mas arriba, ya he probado casi todas las tablas y han funcionado muy bien, cabe señalar q sus columnas son mas pequeñas q las d la tabla con la cual estoy teniendo problemas.

Así q yo le atribuyo a q la falla es por la cantidad d las columnas.

Como apunte extra, ya he probado borrar varias filas del codigo donde hago la consulta.

Aqui t pongo el codigo autogenerado q hace la consulta, a este codigo este codigo se le pasa como parametro el id d orden (q viene siendo el id d la fila):

Código :

public function getOrderByID($itemID) {
      
      $stmt = mysqli_prepare($this->connection, "SELECT * FROM $this->tablename where order_id=?");
      $this->throwExceptionOnError();
      
      mysqli_stmt_bind_param($stmt, 'i', $itemID);      
      $this->throwExceptionOnError();
      
      mysqli_stmt_execute($stmt);
      $this->throwExceptionOnError();
      
      mysqli_stmt_bind_result($stmt, $row->order_id, $row->invoice_id, $row->invoice_prefix, $row->store_id, $row->store_name, $row->store_url, $row->customer_id, $row->customer_group_id, $row->firstname, $row->lastname, $row->telephone, $row->fax, $row->email, $row->shipping_firstname, $row->shipping_lastname, $row->shipping_company, $row->shipping_address_1, $row->shipping_address_2, $row->shipping_city, $row->shipping_postcode, $row->shipping_zone, $row->shipping_zone_id, $row->shipping_country, $row->shipping_country_id, $row->shipping_address_format, $row->shipping_method, $row->payment_firstname, $row->payment_lastname, $row->payment_company, $row->payment_address_1, $row->payment_address_2, $row->payment_city, $row->payment_postcode, $row->payment_zone, $row->payment_zone_id, $row->payment_country, $row->payment_country_id, $row->payment_address_format, $row->payment_method, $row->comment, $row->total, $row->order_status_id, $row->language_id, $row->currency_id, $row->currency, $row->value, $row->coupon_id, $row->date_modified, $row->date_added, $row->ip);
      
      if(mysqli_stmt_fetch($stmt)) {
         $row->date_modified = new DateTime($row->date_modified);
         $row->date_added = new DateTime($row->date_added);
         return $row;
      } else {
         return null;
      }
   }


Flex tambien genera otras funciones, como contar, borrar, actualizar, mostrar dado un rango determinado.


Muchas gracias xcom.

Saludos.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 25 Oct 2010 03:51 pm
SELECT * FROM `order` WHERE order_id = 1

si esta consulta es hecha con el manejador y obtuviste resultado correcto, la parte del cliente , en este caso
la de flex es el problema y el problema viene por que en vez de venir un entero , viene un valor nulo u otro que no corresponde
para saber exacatamente cual es y te LO VUELVO A REPETIR BAJA EL charles debug cuando viene desde http veras
que parametros son los que manda y que funcion es la que manda , ahora si viene un 1 por parametro, pues tendras
que revisar paso a paso, lo conreto que tanto la sentencia sql como la base de datos son correto lo que te queda
por revisar es el lado del cliente , CHARLES DEBUG TEDRA LA RESPUESTA

lo instala corres sobre el plugin proxy que trae charles debug y verfica la funcion desde flex hacia el cliente

Por xcom

Claber

530 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Oct 2010 02:31 am
Hola xcom, ya estuve usando el programa y pues me dice lo mismo, ya verifique los parametros q paso, la llama (query), la respuesta, lo q me retorna y pues es lo mismo. Ya intente con las tablas q he tenido exito al probarlas en flex e igual, funcionan sin ungun problema, estuve comparando resultados y todo esta bien. La verdad no se cual es el problema. Yo se lo sigo achando a la cantidad d columnas q son. Lo q voy a hacer ahora es verificar si el archiv gateway.php autogenerado, tiene algun limite para recibir informacion o algo por estilo.

Se t ocurre algo mas o ya estas seco d ideas igual q yo :P

Muchas gracias por toda tu ayuda.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 11 Nov 2010 06:58 am
Ok, Flash Builder 4 incluye un proxy propio, de modo que no hay necesidad de usar charles (charles es pago), puedes activarlo muy fácil, es un ícono con un "chulito" verde sobre una pantalla, generalmente en el lado derecho inferior.

Cuando lo actives te va a generar un reporte de cada llamada que hagas al servidor, como consejo personal, te recomiendo que hagas el remoteobject y toda la llamada al servidor, de forma manual, el código es menos, vas a poder saber que está pasando en cada momento y es de lo más fácil.
Yo he llamado información con 113 columnas y alrededor de 5000 filas, así que no te tienes que preocupar por el tamaño del paquete de datos cuando haces todo a mano, incluso yo diría que es más simple que hacerlo con el wizard.

Por Xyrer

628 de clabLevel

1 tutorial

Genero:Masculino  

Android App Development

chrome
Citar            
MensajeEscrito el 13 Nov 2010 04:09 am
Hola Xyrer, perdor por responder taannn tarde :P

Al decirme que haga la llamada al servidor y el remoteobject t refieres a hacerlo por medio weborb o al algun framework por estilo? o como?

Saludos y muchas gracias por la respuesta.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 13 Nov 2010 03:53 pm
Hola, me refiero a usar Zend Framework, es soportado por Adobe y supremamente fácil de configurar, mira este ejemplo que fue el que me ayudó al principio:

http://www.gotoandlearn.com/play.php?id=90

Por Xyrer

628 de clabLevel

1 tutorial

Genero:Masculino  

Android App Development

chrome
Citar            
MensajeEscrito el 14 Nov 2010 05:09 pm
Hola muchas gracias por el video, esta excelentemente explicado.

Pero el zend ya viene incluido en el fb 4 y no ocupas generar ninguna linea d codigo para hacer la llamada.
Perooo me gusto mas hacerlo a mano ya q le batallas poquito, pero al fin y al cabo tienes un mayor control sobre tus llamadas.

El problema por el cual genere esta pregunta lo acabo d resolver usando otra manera d hacer la consulta a la bd, en breve subo como lo hice.

Muchas gracias por el video.


Saludos.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 14 Nov 2010 05:24 pm
En realidad, si ocupas miles de lineas de código, solo que no las escribes tu mismo, lo que genera grandes problemas si quieres cambiar algo, me alegra que hayas resuelto tu problema :)

Por Xyrer

628 de clabLevel

1 tutorial

Genero:Masculino  

Android App Development

chrome
Citar            
MensajeEscrito el 18 Nov 2010 03:00 am
Bueno, pues aqui la respuesta q debia...

Lo q hice fue cambiar esto:

Código PHP :

 public function getOrderByID($itemID) {
        
        $stmt = mysqli_prepare($this->connection, "SELECT * FROM $this->tablename where order_id=?");
        $this->throwExceptionOnError();
        
        mysqli_stmt_bind_param($stmt, $itemID);        
        $this->throwExceptionOnError();
        
        mysqli_stmt_execute($stmt);
        $this->throwExceptionOnError();



Por esto:

Código PHP :

   public function getOrderByID($mivar) {
      
      
      $sql = "SELECT * FROM `order` where order_id LIKE '%$mivar%'";
      
      
      $stmt = mysqli_prepare($this->connection, $sql);
      $this->throwExceptionOnError();
      
      mysqli_stmt_execute($stmt);
      $this->throwExceptionOnError();


Esto lo hice en el archivo q autogenera flex 4/zend.

Xyrer, una pregunta... como puedo hacer yo mismo mis propios remote objects sin q se auto-genere codigo, porq marea un poco tanto codigo :P

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 18 Nov 2010 04:42 am
Pues para eso era el video, dime que parte no entendiste y te ayudo :wink:

Por Xyrer

628 de clabLevel

1 tutorial

Genero:Masculino  

Android App Development

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.