0

我有 InnoDB 存储引擎的表。我想在一切正确时开始插入过程。我怎样才能做到这一点 ?

4

2 回答 2

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();
?>

在这里您可以找到一些文档和示例。

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

下面是 CodeIgniter 中非常智能的事务算法的示例:

$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 会自动处理事务,并且角色会返回更改。 CodeIgniter 的事务处理方法

于 2012-05-19T06:50:01.703 回答
2

无论您使用哪个 PHP 库,您始终可以使用以下任一语句启动事务:

  • SET autocommit = off
  • BEGIN
  • START TRANSACTION

一旦开始,你可以做很多工作,当你准备好永久保存它时,做一个提交:

  • COMMIT

或者,当您想要撤消正在进行的工作(直到上一个提交时刻)时,发出回滚:

  • ROLLBACK

您可以使用任何用于 mysql 的 php 库将这些作为普通 SQL 语句简单地运行。

于 2012-05-19T07:14:02.810 回答