3
我正在使用Snap 0.6和Snaplet-hdbc基礎結構編寫Web應用程序。在後端,我使用HDBC-mysql連接到MySQL。但是在運行應用程序時,它會從MySQL獲得「命令不同步,現在無法運行此命令」錯誤。我爲每個查詢使用withTransaction'。谷歌搜索後,似乎MySQL不支持多個查詢。但如何避免使用HDBC?HDBC-mysql「命令不同步」
我正在使用Snap 0.6和Snaplet-hdbc基礎結構編寫Web應用程序。在後端,我使用HDBC-mysql連接到MySQL。但是在運行應用程序時,它會從MySQL獲得「命令不同步,現在無法運行此命令」錯誤。我爲每個查詢使用withTransaction'。谷歌搜索後,似乎MySQL不支持多個查詢。但如何避免使用HDBC?HDBC-mysql「命令不同步」
經過一番調查後,我找到了解決辦法。不要在withTransaction或commit中使用SELECT語句。並且不要使用查詢'用於SELECT。在我看來,HDBC-mysql正在使用mysqlclient庫,因此當最後一個查詢的數據仍未被使用或釋放時,您不能發出新的查詢。由於haskell的懶惰,如果你在withTransaction中運行SELECT,直到你的代碼需要它,數據纔會被使用,所以當withTransaction函數調用commit時,它會導致「Command out of sync」錯誤。對於查詢',也許它會返回選定的行數,但選擇的數據由mysqlclient庫緩衝,所以這是問題所在。