为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
隔江千里 2019-12-12 14:10:54
据我了解,事务开始于调用$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?>我理解正确吗?如果不能,请指正我,因为这实际上是我第一次在现实生活中使用交易。谢谢。
查看完整描述

3 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

好吧,根据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();。



查看完整回答
反对 回复 2019-12-13
?
杨魅力

TA贡献1811条经验 获得超5个赞

j0k主要是正确的,除了在放置表中。


没有使用-> commit()打开自动提交


相反,DROP TABLE是DDL查询,并且DDL查询始终是隐式提交的,并且将提交所有以前未提交的工作。


因此,如果您未提交工作,则DDL查询将强制执行此提交。




查看完整回答
反对 回复 2019-12-13
  • 3 回答
  • 0 关注
  • 288 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信