Php 意外的MySQL事务提交

Php 意外的MySQL事务提交,php,mysql,transactions,odbc,Php,Mysql,Transactions,Odbc,我有一个PHP脚本,可以与MySQL数据库和ODBC数据库连接(QODBC到QuickBooks)一起使用。设置如下所示: Retrieve rows from MySQL database Begin MySQL transaction: Loop through rows Process data MySQL Insert/Update MySQL Update QODBC Selects/Inserts End Loop MySQL Dele

我有一个PHP脚本,可以与MySQL数据库和ODBC数据库连接(QODBC到QuickBooks)一起使用。设置如下所示:

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事务被关闭并自动提交

我想说有两个潜在的原因:

  • 您的表是使用不支持事务的MyISAM创建的
  • 您的连接已设置为自动提交

您应该使用InnoDB在mySQL中使用事务。所有表都是InnoDB。连接设置为autocommit(mysql默认),但是通过发出Begin命令来阅读mysql文档;语句,则对以下查询禁用自动提交。因此,据我所知,循环中发生的所有查询都应该立即提交,而不是在连接到ODBC DB时提交。我不确定我是否理解“连接到ODBC时”部分?你要开通第二个连接吗?打开该连接是否可能隐式关闭第一个连接?对不起,我不懂PHP,所以我只能猜测。事实证明,虽然我认为我已经将表转换为INNODB,但我没有。经验教训-在发布到论坛之前检查所有设置。