mysqli::begin_transaction

mysqli_begin_transaction

(PHP 5 >= 5.5.0, PHP 7)

mysqli::begin_transaction -- mysqli_begin_transactionトランザクションを開始する

説明

オブジェクト指向型 (メソッド):

public bool mysqli::begin_transaction ([ int $flags [, string $name ]] )

手続き型:

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

トランザクションを開始します。InnoDB エンジン (デフォルトで有効になっています) が必要です。 MySQL のトランザクションの詳細な動作は、 » http://dev.mysql.com/doc/mysql/en/commit.html を参照ください。

パラメータ

link

手続き型のみ: mysqli_connect() あるいは mysqli_init() が返すリンク ID。

flags

以下のフラグが使えます。

  • MYSQLI_TRANS_START_READ_ONLY: "START TRANSACTION READ ONLY" でトランザクションを開始します。 MySQL 5.6 以上が必要です。

  • MYSQLI_TRANS_START_READ_WRITE: "START TRANSACTION READ WRITE" でトランザクションを開始します。 MySQL 5.6 以上が必要です。

  • MYSQLI_TRANS_START_WITH_CONSISTENT_SNAPSHOT: "START TRANSACTION WITH CONSISTENT SNAPSHOT" でトランザクションを開始します。

name

トランザクションのセーブポイント名。

返り値

成功した場合に TRUE を、失敗した場合に FALSE を返します。

例1 $mysqli->begin_transaction() の例

オブジェクト指向型

<?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($linkMYSQLI_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() - 現在のトランザクションをロールバックする

add a note add a note

User Contributed Notes 2 notes

up
6
Luc
1 year ago
For PHP<5.5:

    mysqli_query($db, "START TRANSACTION");
up
-1
Ral
1 month ago
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.
To Top