如何确保两个MySQL查询成功?

时间:2011-04-19 11:29:25

标签: php mysql insert

我的PHP代码中有两个MySQL查询。

基本上我需要执行两个查询(它们是两个INSERT)查询,两者都必须成功。例如,如果query1成功但query2不成功;我需要回滚query1,因为两个查询都必须成功。

我正在使用MyISAM而且我知道我不能做回滚等但是有什么方法可以解决我的问题(另一种解决方案)来做我想做的事情吗?

它们彼此依赖,因为query1存储来自表单的数据,query2将一些其他细节插入另一个表(它基本上是一个计数器),用于跟踪引用系统的总计数。

4 个答案:

答案 0 :(得分:3)

一种选择是将所插入记录的ID存储在第一个表中。如果第二个查询失败,请使用删除查询删除第一个查询插入的记录。 我建议你把引擎更改为InnoDB,这样你就可以使用交易了。或者您是否有特定原因使用MyISAM(如全文搜索?)

答案 1 :(得分:3)

第一次插入后,您可以使用mysql_insert_id()获取ID并存储它。

然后,当您执行第二个查询时,也获取该ID。如果ID为null,则表示它不成功,并且您已获得旧ID,因此您可以删除它,如此

DELETE FROM table WHERE id='$insertId'

修改

请注意,这不是一个完整的解决方案,唯一真正的方法是转换为InnoDB

答案 2 :(得分:1)

听起来像你需要交易。

http://www.techrepublic.com/article/implement-mysql-based-transactions-with-a-new-set-of-php-extensions/6085922

它们允许您在单个事务中回滚整个系列的数据库修改。

答案 3 :(得分:1)

交易的答案。如果您选择的存储引擎不支持它们,并且您有这种情况,那么您可能选择了错误的存储引擎。