当前位置: 首页 > 面试题库 >

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

西门洛城
2023-03-14
问题内容

据我了解,事务开始于调用$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
?>

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

谢谢。


问题答案:

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


 类似资料:
  • 如何先按开始日期在fullCalendar中排序事件? 示例: 首先开始的事件将显示在顶部,随后开始的事件将显示在后面 如果两个事件的开始日期相同,则按结束日期对它们进行排序,即先显示一个较早结束的事件,然后显示一个较晚结束的事件。 日历显示事件顺序

  • 我想从JavaGUI到数据库获取startTime和endTime的值。 电脑座位班 Cobadatabase类 这里的问题是,当单击登录按钮时,开始时间显示在我的数据库中的开始时间和结束时间列上。当单击注销按钮时,将在数据库中创建另一个行,该行在starTime和endTime列上都包含endTime。我想知道为什么会这样...

  • 我的目标是在python中找到循环语句的开始和结束的行号。 示例场景 当前解析器代码 我想实现上述输出。我使用AST解析给定的文件并确定循环的出现。通过AST解析,我能够找到循环开始时的行号,但循环结束时的行号尚未确定。是否有任何方法可以解析整个循环语句并确定其起始行号和结束行号?

  • 问题内容: 我必须使用Java 类来解决此问题(它与我无法控制的内容进行接口)。 如何获得一年的开始和结束日期,然后遍历每个日期? 问题答案:

  • 7. 直播开始/结束,/录制结束回调通知 7.1. 功能 通知客户直播已开始/结束,此接口为我方调用客户的接口,告知客户直播过程已开始(或结束) 7.2. 地址 由客户提供 7.3. 请求参数 直播结束参数: 必须有的参数: 流名,liveId(场次号),开始时间,结束时间 其它参数:推流端IP,推流URL 录制结束参数: 必须有的参数: 流名,liveId(场次号),开始时间,结束时间,状态(录

  • 我怎样才能达到这样的效果?对不起,如果我不能邮政编码,它是由jasper报告生成的。