HDBC-mysql "команда не синхронизирована" - PullRequest
3 голосов
/ 06 ноября 2011

Я пишу веб-приложение с использованием Snap 0.6 и инфраструктуры Snaplet-hdbc.В бэкэнде я использую HDBC-mysql для подключения к MySQL.Но при запуске приложения из MySQL выдается ошибка «Команда не синхронизирована, вы не можете запустить эту команду сейчас».Я использую withTransaction для каждого запроса.После некоторого поиска в Google, похоже, что MySQL не поддерживает множественные запросы.Но как этого избежать, используя HDBC?

1 Ответ

0 голосов
/ 07 ноября 2011

После некоторого расследования я нашел решение. Не используйте оператор SELECT в withTransaction или commit. И не используйте запрос 'для выбора. На мой взгляд, HDBC-mysql использует библиотеку mysqlclient, поэтому вы не можете выполнить новый запрос, когда данные последнего запроса все еще не используются или освобождены. Из-за лени haskell, если вы запустите SELECT в withTransaction, данные не будут использоваться до тех пор, пока ваш код не понадобится, поэтому, когда функция withTransaction вызывает commit, это приведет к ошибке «Command of sync». Для запроса ', возможно, он возвращает количество выбранных строк, но выбранные данные буферизируются библиотекой mysqlclient, так что это проблема.

...