如何在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

?>

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


谢谢。


隔江千里
浏览 290回答 3
3回答

温温酱

好吧,根据php doc,您是对的。<?php$mysqli = new mysqli("localhost", "my_user", "my_password", "world");/* check connection */if (mysqli_connect_errno()) {&nbsp; &nbsp; printf("Connect failed: %s\n", mysqli_connect_error());&nbsp; &nbsp; 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();。

杨魅力

j0k主要是正确的,除了在放置表中。没有使用-> commit()打开自动提交相反,DROP TABLE是DDL查询,并且DDL查询始终是隐式提交的,并且将提交所有以前未提交的工作。因此,如果您未提交工作,则DDL查询将强制执行此提交。
打开App,查看更多内容
随时随地看视频慕课网APP