PHP Australia Conference 2015

mysqli::commit

mysqli_commit

(PHP 5)

mysqli::commit -- mysqli_commitConsigna la transacción actual

Descripción

Estilo orientado a objetos

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

Estilo por procedimientos

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

Consigna la transacción actual para la conexión a la base de datos.

Parámetros

link

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

flags

Una máscara de bits de constantes MYSQLI_TRANS_COR_*.

name

Si se proporciona, se ejecuta COMMIT/*name*/.

Valores devueltos

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

Historial de cambios

Versión Descripción
5.5.0 Se añadieron los parámetros flags y name.

Ejemplos

Ejemplo #1 Ejemplo de mysqli::commit()

Estilo orientado a objetos

<?php
$mysqli 
= new mysqli("localhost""my_user""my_password""world");

/* Comprobar la conexión */
if (mysqli_connect_errno()) {
    
printf("Falló la conexión: %s\n"mysqli_connect_error());
    exit();
}

$mysqli->query("CREATE TABLE Language LIKE CountryLanguage");

/* Desactivar la autoconsigna */
$mysqli->autocommit(FALSE);

/* Inserta algunos valores */
$mysqli->query("INSERT INTO Language VALUES ('DEU', 'Bavarian', 'F', 11.2)");
$mysqli->query("INSERT INTO Language VALUES ('DEU', 'Swabian', 'F', 9.4)");

/* Consignar la transacción */
if (!$mysqli->commit()) {
    print(
"Falló la consignación de la transacción\n");
    exit();
}

/* Eliminar la tabla */
$mysqli->query("DROP TABLE Language");

/* Cerrar la conexión */
$mysqli->close();
?>

Estilo por procedimientos

<?php
$enlace 
mysqli_connect("localhost""my_user""my_password""test");

/* Comprobar la conexión */
if (!$enlace) {
    
printf("Falló la conexión: %s\n"mysqli_connect_error());
    exit();
}

/* Desactivar la autoconsignación */
mysqli_autocommit($enlaceFALSE);

mysqli_query($enlace"CREATE TABLE Language LIKE CountryLanguage");

/* Insertar algunos valores */
mysqli_query($enlace"INSERT INTO Language VALUES ('DEU', 'Bavarian', 'F', 11.2)");
mysqli_query($enlace"INSERT INTO Language VALUES ('DEU', 'Swabian', 'F', 9.4)");

/* Consignar la transación */
if (!mysqli_commit($enlace)) {
    print(
"Falló la consignación de la transacción\n");
    exit();
}

/* Cerrar la conexión */
mysqli_close($enlace);
?>

Ver también

add a note add a note

User Contributed Notes 4 notes

up
10
Lorenzo - webmaster AT 4tour DOT it
5 years ago
This is an example to explain the powerful of the rollback and commit functions.
Let's suppose you want to be sure that all queries have to be executed without errors before writing data on the database.
Here's the code:

<?php
$all_query_ok
=true; // our control variable

//we make 4 inserts, the last one generates an error
//if at least one query returns an error we change our control variable
$mysqli->query("INSERT INTO myCity (id) VALUES (100)") ? null : $all_query_ok=false;
$mysqli->query("INSERT INTO myCity (id) VALUES (200)") ? null : $all_query_ok=false;
$mysqli->query("INSERT INTO myCity (id) VALUES (300)") ? null : $all_query_ok=false;
$mysqli->query("INSERT INTO myCity (id) VALUES (100)") ? null : $all_query_ok=false; //duplicated PRIMARY KEY VALUE

//now let's test our control variable
$all_query_ok ? $mysqli->commit() : $mysqli->rollback();

$mysqli->close();
?>

hope to be helpful!
up
6
snchzantonio at gmail dot com
1 year ago
I never recomend to use the ? with only one value variant like: $var = expression ? $var  : other_value or $var = expression ? null  : other_value ,and php suport Exception catchin so,use it :)

here my opinion abut lorenzo's post:

  <?php

//variants combined

$mysqli->autocommit(FALSE);

try{

 
$mysqli->query("INSERT INTO myCity (id) VALUES (100)") or throw new Exception('error!');

// or we can use

 
if( !$mysqli->query("INSERT INTO myCity (id) VALUES (200)"){
    throw new
Exception('error!');
  }

}catch(
Exception $e ){
 
$mysqli->rollback();
}
$mysqli->commit();

?>
up
3
mvanlamz
5 years ago
Please note that calling mysqli::commit() will NOT automatically set mysqli::autocommit() back to 'true'.

This means that any queries following mysqli::commit() will be rolled back when your script exits.
up
-11
Bob Johnson
5 years ago
The compactness of Lorenzo's code is admirable.
However, it is a good idea to also check  $mysqli->affected_rows to make sure that the INSERT statement did not fail.

<?php
$result_query
= @mysqli_query($query, $connect);
                if ((
$result_query == false) &&
                   (
mysqli_affected_rows($connect) == 0))
                 {
                   
// verify the query executed completely and verify that it
                    // had impact on the table

                   
$success = false;

                   
// here also, the developer could choose to add a ROLLBACK
                    // statement
               
}
?>
To Top