SunshinePHP 2019

mysqli::begin_transaction

mysqli_begin_transaction

(PHP 5 >= 5.5.0, PHP 7)

mysqli::begin_transaction -- mysqli_begin_transactionInicia una transacción

Descripción

Estilo orientado a objetos (método):

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

Estilo por procedimientos:

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

Comienza una transacción. Requiere MySQL 5.6 y superior, y el motor InnoDB (está habilitado por defecto). Para detalles adicionales sobre cómo funcionan las transacciones de MySQL, véase » http://dev.mysql.com/doc/mysql/en/commit.html.

Parámetros

link

Sólo estilo por procediminetos: Un identificador de enlace devuelto por mysqli_connect() o mysqli_init()

flags

Banderas. Las válidas son:

  • MYSQLI_TRANS_START_READ_ONLY: Inicia la transacción como "START TRANSACTION READ ONLY".

  • MYSQLI_TRANS_START_READ_WRITE: Inicia la transacción como "START TRANSACTION READ WRITE".

  • MYSQLI_TRANS_START_WITH_CONSISTENT_SNAPSHOT: Inicia la transacción como "START TRANSACTION WITH CONSISTENT SNAPSHOT".

name

Nombre del punto de prevención de la transacción.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de $mysqli->begin_transaction()

Estilo orientado a objetos

<?php
$mysqli 
= new mysqli("127.0.0.1""mi_usuario""mi_contraseña""sakila");

if (
$mysqli->connect_errno) {
    
printf("Conexión fallida: %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();
?>

Estilo por procedimientos

<?php
$enlace 
mysqli_connect("127.0.0.1""mi_usuario""mi_contraseña""sakila");

if (
mysqli_connect_errno()) {
    
printf("Conexión fallida: %s\n"mysqli_connect_error());
    exit();
}

mysqli_begin_transaction($enlaceMYSQLI_TRANS_START_READ_ONLY);

mysqli_query($enlace"SELECT first_name, last_name FROM actor LIMIT 1");
mysqli_commit($enlace);

mysqli_close($enlace);
?>

Ver también

add a note add a note

User Contributed Notes 3 notes

up
4
Luc
2 years ago
For PHP<5.5:

    mysqli_query($db, "START TRANSACTION");
up
2
Ral
6 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.
up
0
VasK@hapir
1 day ago
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
To Top