我正在使用Snap 0.6和Snaplet hdbc基础设施编写一个web应用程序。在后端,我使用HDBC mysql连接到mysql。但在运行应用程序时,MySQL会出现一个“命令不同步,现在无法运行此命令”错误。我正在使用“withTransaction”进行每个查询。经过一番搜索,MySQL似乎不支持多个查询。但是如何避免使用HDBC呢?
最佳答案
经过一番调查,我找到了解决办法。不要在withTransaction或with commit中使用SELECT语句。不要用“查询”来选择。在我看来,HDBC-mysql使用的是mysqlclient库,所以当最后一个查询的数据还未使用或释放时,就不能发出新的查询。由于haskell的惰性,如果运行SELECT-in-withTransaction,则在代码需要数据之前,数据是未使用的,因此当withTransaction函数调用commit时,将导致“命令不同步”错误。对于query',它可能返回所选行的数目,但是所选的数据由mysqlclient库缓冲,所以这就是问题所在。