mysqli::begin_transaction

mysqli_begin_transaction

(PHP 5 >= 5.5.0, PHP 7)

mysqli::begin_transaction -- mysqli_begin_transactionСтартует транзакцию

Описание

Объектно-ориентированный стиль (method):

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()

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
2 years ago
For PHP<5.5:

    mysqli_query($db, "START TRANSACTION");
up
-1
Ral
5 months 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