Php mysql:事务?插入并更新

Php mysql:事务?插入并更新,php,mysql,transactions,Php,Mysql,Transactions,我需要做两个查询 基本上它是一个 mysql_query("INSERT INTO table ($value1,$value2)"); 及 我想我可以简单地做一件事 if (mysql_query("INSERT ...") !== false) { mysql_query("UPDATE ..."); } 在这种情况下,我应该使用事务吗?我应该如何使用它? 或者我可以简单地说,如果 谢谢如果您想要一些“全有或全无”的行为,您通常会使用事务 基本上,对于事务,您可以: 启动交易 执

我需要做两个查询

基本上它是一个

mysql_query("INSERT INTO table ($value1,$value2)");

我想我可以简单地做一件事

if (mysql_query("INSERT ...") !== false) {
   mysql_query("UPDATE ...");
}
在这种情况下,我应该使用事务吗?我应该如何使用它?
或者我可以简单地说,如果


谢谢

如果您想要一些“全有或全无”的行为,您通常会使用事务

基本上,对于事务,您可以:

  • 启动交易
  • 执行第一个查询
  • 如果成功,则执行第二个查询
    • 如果成功,提交事务
    • 否则,回滚事务——取消与该事务对应的两个查询

如果使用函数,则必须:

  • 使用
    Start transaction
    查询启动事务
  • 请回答您的问题
  • 根据这些查询的结果,执行
    COMMIT
    ROLLBACK
    查询
要检测查询是否成功,您确实可以检查返回值:如果出现错误,它将返回
false

注意:MySQL是旧的扩展,没有处理事务的功能;这意味着您必须将它们作为常规查询来处理


使用,您可以使用:

  • 禁用自动提交

对于插入和更新,MySQL有一个很好的替代解决方案-“在重复密钥更新上”。它可以在单个查询中安全地执行您想要的操作:

INSERT .... ON DUPLICATE KEY UPDATE
(在这种情况下,密钥也必须设置为唯一)


如果我在这种情况下是否应该使用事务,这不会回答问题。您是否想要“全部或无”行为?(我们无法为您猜测;-)如果您这样做,请使用交易;如果你不。。。嗯,不需要交易。是的,我想要全部或不想要(但我想我的问题中的IF很清楚)xD。。。。所以基本上,在所有查询之前,我使用START TRANSACTION执行查询,在查询结束时执行提交?如果某个查询失败了,我需要执行回滚,我如何跟踪?好的,你说我应该检查mysql\u查询的返回值。。如果它返回FALSE,我将执行回滚,对吗?。。。但如果我有很多疑问,那就太糟糕了,这就是为什么我们倾向于使用异常(PDO,而不是mysql,它可以在出错时抛出异常);这样,catch语句中只有一个roolback。如果更新失败,可以保留insert吗?
INSERT .... ON DUPLICATE KEY UPDATE