我正在使用Snap 0.6和Snaplet-hdbc基础架构编写Web应用程序。在后端,我正在使用HDBC-mysql连接到MySQL。但是在运行应用程序时,它会从MySQL获得“命令不同步,您无法立即运行此命令”错误。我为每个查询使用withTransaction'。经过一些谷歌搜索,似乎MySQL不支持多个查询。但是如何使用HDBC来避免它?
答案 0 :(得分:0)
经过一番调查,我找到了解决方案。不要在withTransaction或commit中使用SELECT语句。并且不要使用查询'用于SELECT。在我看来,HDBC-mysql正在使用mysqlclient库,因此当最后一个查询的数据仍未使用或被释放时,您无法发出新查询。由于haskell的懒惰,如果在withTransaction中运行SELECT,则数据在代码需要之前是未使用的,因此当withTransaction函数调用commit时,将导致“Command out of sync”错误。对于查询',它可能返回选择的行数,但是选择的数据是由mysqlclient库缓冲的,所以这就是问题所在。