HDBC-mysql "comando desincronizado"

Estoy escribiendo una aplicación web usando Snap 0.6 y la infraestructura Snaplet-hdbc. En el backend, estoy usando HDBC-mysql para conectarme a MySQL. Pero al ejecutar la aplicación, aparece el error "Comando desincronizado, no puede ejecutar este comando ahora" de MySQL. Estoy usando withTransaction 'para cada consulta. Después de buscar en Google, parece que MySQL no admite consultas múltiples. Pero, ¿cómo evitarlo usando HDBC?

preguntado el 06 de noviembre de 11 a las 15:11

1 Respuestas

Después de investigar un poco, encontré la solución. No use la instrucción SELECT en withTransaction o con commit. Y no use query 'para SELECT. En mi opinión, HDBC-mysql está usando la biblioteca mysqlclient, por lo que no puede emitir una nueva consulta cuando los datos de la última consulta aún no se utilizan o están libres. Debido a la pereza de Haskell, si ejecuta un SELECT en withTransaction, los datos no se utilizarán hasta que su código los necesite, por lo que cuando la función withTransaction llame a commit, dará como resultado el error "Comando no sincronizado". Para query ', tal vez devuelva el número de filas seleccionadas, pero los datos seleccionados son almacenados en búfer por la biblioteca mysqlclient, por lo que ese es el problema.

respondido 07 nov., 11:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.