php - 如何在 mysqli 中开始和结束事务?

标签 php transactions mysqli

据我所知,事务在我们调用 $mysqli->autocommit(FALSE); 语句后开始,并在调用 $mysqli->commit(); 命令后结束就像下面的例子一样。

<?php
//Start transaction 
$mysqli->autocommit(FALSE);
$mysqli->query('UPDATE `table` SET `col`=2');
$mysqli->query('UPDATE `table1` SET `col1`=3;');
$mysqli->commit();
//End transaction

//Executing other queries without transaction control
$mysqli->query("Select * from table1");
$mysqli->query("Update table1 set col1=2");
//End of executing other queries without transaction control

//Start transaction 
$mysqli->autocommit(FALSE);
$mysqli->query('UPDATE `table` SET `col`=2');
$mysqli->query('UPDATE `table1` SET `col1`=3;');
$mysqli->commit();
//End transaction
?>

我的理解正确吗?如果不是,请指正,因为这实际上是我第一次在现实生活中使用交易。

谢谢。

最佳答案

2020 年 11 月更新:@Dharman给出了更好的答案,其中包含有关 mysqli 中事务的更多详细信息,只需检查一下即可:https://stackoverflow.com/a/63764001/569101 👇


根据 the php doc ,你是对的。

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$mysqli->query("CREATE TABLE Language LIKE CountryLanguage");

/* set autocommit to off */
$mysqli->autocommit(FALSE);

/* Insert some values */
$mysqli->query("INSERT INTO Language VALUES ('DEU', 'Bavarian', 'F', 11.2)");
$mysqli->query("INSERT INTO Language VALUES ('DEU', 'Swabian', 'F', 9.4)");

/* commit transaction */
$mysqli->commit();

/* drop table */
$mysqli->query("DROP TABLE Language");

/* close connection */
$mysqli->close();
?>

在上面的例子中:

  • CREATE TABLE 是自动提交的,因为它是默认行为。
  • INSERT INTO 没有自动提交,因为 autocommit(FALSE)
  • DROP TABLE 是自动提交的,因为 autocommit(FALSE)->commit()reset;

关于php - 如何在 mysqli 中开始和结束事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12091971/

相关文章:

php - MySQL/PHP 查询

mysql - Zend 框架提示 "There is already an active transaction"

php mysqli 行数

php - unset 和 = null 的区别

php - 将产品自定义字段添加到 WooCommerce 已完成订单电子邮件

PHP-MYSQLI : My login scripts logs direct users into the same page

php - 如何在多用户网站中使用准备好的语句?

php - 代码点火器事务

design-patterns - OO 设计/模式 - 胖模型与事务脚本?

javascript - 从数据库插入下拉列表到wordpress页面($.post没有功能)