2011-04-25 52 views
2

我有一个PHP脚本,可以同时用于MySQL数据库和ODBC数据库连接(QODBC到QuickBooks)。设置是这样的:意外的MySQL事务提交

Retrieve rows from MySQL database 
Begin MySQL transaction: 
    Loop through rows 
    Process data 
    MySQL Insert/Update 
    MySQL Update 
    QODBC Selects/Inserts 
End Loop 
    MySQL Delete 
Commit Transaction 

问题是,如果QODBC部分中有错误,那么直到那一点的MySQL命令将被提交。这导致MySQL中重复和错误的数据。没有嵌套事务,并且所有查询成功/失败正在解决(即没有致命错误或过早退出脚本)。

问题是 - 在通过PHP连接到两个不同的数据库时,在同一个脚本中是否存在问题?似乎发生的情况是脚本到达ODBC部分时,MySQL事务关闭并自动提交。

回答

3

我说有两个可能的原因:

  • 你的表格是通过的MyISAM不支持事务创建
  • 你的连接设置为自动提交
+0

你应该使用InnoDB在mySQL中使用事务。 – Tareq 2011-04-25 17:17:40

+0

所有表都是INNODB。连接设置为自动提交(默认为mysql),但通过发布Begin来读取MySQL文档;声明,自动提交被禁用以下查询。所以,据我了解,循环中发生的所有查询都应该立即提交 - 而不是与ODBC DB建立连接时。 – Conor 2011-04-25 17:30:06

+0

我不确定我是否理解“何时与ODBC建立连接”部分?你是否打开第二个连接?是否可能打开该连接隐式关闭第一个连接?对不起,我不知道PHP,所以我只能猜测。 – 2011-04-25 17:33:47