2012-05-19 138 views

回答

2

您可以使用支持事务的类MySQLi轻松地做到这一点。

下面是一个例子:

<?php 
    $mysqli = new mysqli("example.com", "user", "password", "database"); 
    $mysqli->autocommit(false); 

    $mysqli->query("INSERT INTO test(id) VALUES (1)"); 
    $mysqli->rollback(); 

    $mysqli->query("INSERT INTO test(id) VALUES (2)"); 
    $mysqli->commit(); 
?> 

Here you can find some documentation an examples.

此外,如果你使用的是框架,检查它的文档。通常有一个很酷的实现和交易方法。

这里是一个非常聪明的交易算法CI中的例子:

$this->db->trans_start(); 
$this->db->query('AN SQL QUERY...'); 
$this->db->query('ANOTHER QUERY...'); 
$this->db->query('AND YET ANOTHER QUERY...'); 
$this->db->trans_complete(); 

笨处理事务和自动备份角色的变化,如果没有在查询中的一个错误。 CodeIgniter's Approach to Transactions

+1

你能举出你的第二段的例子吗?从我看到的情况来看,PHP框架中的事务支持如果存在的话,往往是毫无用处的。 –

+0

@Michael Borgwardt那是怎么回事? –

+0

你的例子是我期望的最小值。除非它像嵌套和声明式交易那样,否则我不会称之为“智能”。 –

2

不管你使用的PHP库的,随时都可以使用这两种语句的事务:

  • SET autocommit = off
  • BEGIN
  • START TRANSACTION

一旦开始后,您可以完成大量工作,并准备好永久保存它,做一个承诺:

  • COMMIT

或者,当你想撤消工作正在进行中(直到先前提交时刻)发出回滚:

  • ROLLBACK

你可以简单地运行这些作为普通的SQL语句与MySQL的任何PHP库。