首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PHP中使用MySQL事务?

问如何在PHP中使用MySQL事务?
EN

Stack Overflow用户
提问于 2010-08-26 05:38:19
回答 3查看 828关注 0票数 0

对不起,这是一个很笼统的问题,但我会尽量缩小范围。

我对MySQL/PHP中的所有事务都很陌生,但这看起来很简单。我只是使用mysql,而不是mysqli或PDO。我有一个脚本,它似乎正在回滚一些查询,但没有其他查询。这对我来说是未知的领域,所以我不知道发生了什么。

我用mysql_query('START TRANSACTION;')启动事务,我理解它同时禁用了自动提交。然后,我有很多复杂的代码,每当我进行查询时,它都是类似于这个mysql_query($sql) or $error = "Oh noes!"的。然后周期性地我有一个名为error_check()的函数,它检查$error是否是空的,如果不是空的,则检查mysql_query('ROLLBACK;')和die($error)。在后面的代码中,我有mysql_query('COMMIT;')。但是,如果我执行两个查询,然后故意抛出一个错误,我的意思是只设置$error = something,看起来第一个查询回滚,但第二个查询没有。

会有什么问题吗?我不知道的交易有什么问题吗?我不太清楚这些事务是如何开始和停止的,特别是当您将PHP混入其中时.

编辑:我的示例过于简化--实际上至少有两个事务在单独的表上进行插入、更新或删除。但是在执行每个语句之前,我会备份相应的“历史”表中的行,以允许撤消操作。看起来,主表的操作被回滚了,但是历史表中的条目仍然存在。

EDIT2: Doh!当我完成输入之前的编辑时,me...there上出现了一些问题,这些特定的tables...for肯定有问题,因为它们都被设置为MyISAM。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-26 07:32:48

请注意:确保所有表都使用事务支持引擎。假的。

票数 1
EN

Stack Overflow用户

发布于 2010-08-26 07:29:28

我建议使用米斯里或PDO函数而不是mysql,因为它们提供了一些值得改进的地方--特别是准备好的陈述的使用。

如果不看到您的代码,就很难确定问题所在。考虑到您说您的代码很复杂,问题很可能在于您的代码而不是MySQL事务。

您试过创建一些独立的测试脚本吗?也许您可以将SQL语句与应用程序隔离开来,并创建一个简单的脚本,只需串联运行它们。如果这有效的话,你已经缩小了问题的来源。您可以回显应用程序中的SQL语句,以获得运行顺序。

您还可以尝试测试来自MySQL客户端或通过PHPMyAdmin的相同序列的SQL语句。

您的历史表在同一个数据库中吗?

票数 0
EN

Stack Overflow用户

发布于 2010-08-26 07:39:48

Mysql事务只使用mysqli (而不是经典方法)。我一直在用交易。我所做的就是停用自动提交并运行我的SQL语句。

代码语言:javascript
复制
$mysqli->autocommit(FALSE);

支持选择、插入、删除所有内容。只要我使用相同的mysqli句柄来调用这些语句,它们就在事务包装器中。只要事务仍然打开,外部任何人(不使用相同的mysqli句柄)都不会看到使用INSERT/DELETE编写/删除的任何数据。因此,关键是要确保每个SQL语句都使用该句柄触发。事务提交后,数据将提供给其他db连接。

代码语言:javascript
复制
$mysqli->commit();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3572292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档