3

我正在使用 Snap 0.6 和 Snaplet-hdbc 基础架构编写一个 Web 应用程序。在后端,我使用 HDBC-mysql 连接到 MySQL。但是在运行应用程序时,它会收到来自 MySQL 的“命令不同步,您现在无法运行此命令”错误。我为每个查询使用 withTransaction'。经过一番谷歌搜索,MySQL 似乎不支持多查询。但是如何使用 HDBC 来避免它呢?

4

1 回答 1

0

经过一番调查,我找到了解决方案。不要在 withTransaction 或 with commit 中使用 SELECT 语句。并且不要对 SELECT 使用 query'。在我看来,HDBC-mysql 使用的是 mysqlclient 库,因此当最后一次查询的数据仍未使用或释放​​时,您不能发出新的查询。由于haskell的惰性,如果你在withTransaction中运行一个SELECT,数据在你的代码需要之前是不用的,所以当withTransaction函数调用commit时,会导致“Command out of sync”的错误。对于查询',也许它返回选择的行数,但是选择出来的数据是由mysqlclient库缓冲的,所以是问题所在。

于 2011-11-07T02:32:53.890 回答