• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • mysqli::begin_transaction()

    (PHP 5 >= 5.5.0, PHP 7)

    Starts a transaction

    说明

    面向对象风格(method):

    publicmysqli::begin_transaction([int $flags= 0[,string $name]]): bool

    过程化风格:

    mysqli_begin_transaction(mysqli$link[,int $flags= 0[,string $name]]): bool

    Begins a transaction. Requires the InnoDB engine(it is enabled by default). For additional details about how MySQL transactions work, see » http://dev.mysql.com/doc/mysql/en/commit.html.

    参数

    $link

    仅以过程化样式:由mysqli_connect()或mysqli_init()返回的链接标识。

    $flags

    Valid flags are:

    • MYSQLI_TRANS_START_READ_ONLY: Start the transaction as "START TRANSACTION READ ONLY". Requires MySQL 5.6 and above.

    • MYSQLI_TRANS_START_READ_WRITE: Start the transaction as "START TRANSACTION READ WRITE". Requires MySQL 5.6 and above.

    • MYSQLI_TRANS_START_WITH_CONSISTENT_SNAPSHOT: Start the transaction as "START TRANSACTION WITH CONSISTENT SNAPSHOT".

    $name

    Savepoint name for the transaction.

    返回值

    成功时返回TRUE,或者在失败时返回FALSE

    范例

    Example #1 $mysqli->begin_transaction() example

    面向对象风格

    <?php
    $mysqli = new mysqli("127.0.0.1", "my_user", "my_password", "sakila");
    if ($mysqli->connect_errno) {
        printf("Connect failed: %s\n", $mysqli->connect_error);
        exit();
    }
    $mysqli->begin_transaction(MYSQLI_TRANS_START_READ_ONLY);
    $mysqli->query("SELECT first_name, last_name FROM actor");
    $mysqli->commit();
    $mysqli->close();
    ?>
    

    过程化风格

    <?php
    $link = mysqli_connect("127.0.0.1", "my_user", "my_password", "sakila");
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }
    mysqli_begin_transaction($link, MYSQLI_TRANS_START_READ_ONLY);
    mysqli_query($link, "SELECT first_name, last_name FROM actor LIMIT 1");
    mysqli_commit($link);
    mysqli_close($link);
    ?>
    

    参见

    • mysqli_autocommit() 打开或关闭本次数据库连接的自动命令提交事务模式
    • mysqli_commit() 提交一个事务
    • mysqli_rollback() 回退当前事务
    If you receive errors like: "This server version doesn't support 'READ WRITE' and 'READ ONLY'. Minimum 5.6.5 is required" with versions of MariaDB that DO support them, this is due to an internal check in mysqli conflicting with a hack in MariaDB to allow replication with oracle mysql.
    MariaDB prefixes its server version numbers with "5.5.5-" for example "5.5.5-10.3.7-MariaDB-1:10.3.7+maria~stretch". This is because oracle mysql would interpet the "10" as version 1. Mysql clients aware of MariaDB have been updated to detect and strip this prefix.
    However the check for mysqli.begin-transaction sees the 5.5.5 prefix and so fails.
    The workaround is to specify a custom version string without the prefix for MariaDB on the command line using the --version option. Then mysqli.begin-transaction functions as expected.
    For PHP<5.5:
      mysqli_query($db, "START TRANSACTION");
    The above answer from Ral worked for us, Thanks a lot. This is how we implemented the proposed workaround for 
    Warning: mysqli_begin_transaction(): This server version doesn't support 'READ WRITE' and 'READ ONLY'. Minimum 5.6.5 is required
    We appended the following line to /etc/my.cnf and restarted MySQL server
    version=10.2.19-MariaDB