我需要做2个查询。
基本上就是
mysql_query("INSERT INTO table ($value1,$value2)");
和
mysql_query("UPDATE table2 SET field1 = '$value1', field2 = '$value2'");
我想我可以简单地做一个
if (mysql_query("INSERT ...") !== false) {
mysql_query("UPDATE ...");
}
在这种情况下,我应该使用事务吗?我应该如何使用它?或者我能留下这个简单的如果吗?
谢谢
如果你想要一些"全有或全无"的行为,你通常会使用事务。
基本上,对于事务,您可以:
- 启动事务
- 执行第一个查询
- 如果成功,执行第二个查询
- 如果成功,提交事务
- 否则,回滚事务——取消与该事务对应的两个查询。
如果使用mysql_*
函数,则必须:
- 启动事务,使用
START TRANSACTION
查询 - 查询
- 根据这些查询的结果,要么做
COMMIT
或ROLLBACK
查询。
要检测查询是否成功,您确实可以检查mysql_query()
的返回值:如果出现错误,它将返回false
。
注意:MySQL是旧的扩展——并且没有处理事务的函数;这意味着你必须把它们作为常规查询来处理。
使用mysql,你可以使用:
-
mysqli::autocommit()
禁用自动提交 - 和
mysqli::commit()
或mysqli::rollback()
对于插入和更新,MySQL有一个很好的替代解决方案- "ON DUPLICATE KEY UPDATE"。它在单个查询中安全地完成了您想要的功能:
INSERT .... ON DUPLICATE KEY UPDATE
(在此场景中键必须设置为唯一)
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html