mysqli::commit

mysqli_commit

(PHP 5)

mysqli::commit -- mysqli_commitValide la transaction courante

Description

Style orienté objet

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

Style procédural

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

Valide la transaction courante pour la base de données spécifiée par le paramètre link.

Liste de paramètres

link

Seulement en style procédural : Un identifiant de lien retourné par la fonction mysqli_connect() ou par la fonction mysqli_init()

flags

Un masque de constantes MYSQLI_TRANS_COR_*.

name

Si fourni, alors COMMIT/*name*/ est exécuté.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Historique

Version Description
5.5.0 Ajout des paramètres flags et name.

Exemples

Exemple #1 Exemple avec mysqli::commit()

Style orienté objet

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

/* Vérification de la connexion */
if (mysqli_connect_errno()) {
    
printf("Échec de la connexion : %s\n"mysqli_connect_error());
    exit();
}

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

/* Désactivation de l'autocommit */
$mysqli->autocommit(FALSE);

/* Insertion de quelques valeurs */
$mysqli->query("INSERT INTO Language VALUES ('DEU', 'Bavarian', 'F', 11.2)");
$mysqli->query("INSERT INTO Language VALUES ('DEU', 'Swabian', 'F', 9.4)");

/* Validation de la transaction */
if (!$mysqli->commit()) {
    print(
"Echec de la validation de la transaction\n");
    exit();
}

/* Effacement de la table */
$mysqli->query("DROP TABLE Language");

/* Fermeture de la connexion */
$mysqli->close();
?>

Style procédural

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

/* Vérification de la connexion */
if (!$link) {
    
printf("Échec de la connexion : %s\n"mysqli_connect_error());
    exit();
}

/* Désactivation de l'autocommit */
mysqli_autocommit($linkFALSE);

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

/* Insertion de quelques valeurs */
mysqli_query($link"INSERT INTO Language VALUES ('DEU', 'Bavarian', 'F', 11.2)");
mysqli_query($link"INSERT INTO Language VALUES ('DEU', 'Swabian', 'F', 9.4)");

/* Validation de la transaction */
if (!mysqli_commit($link)) {
    print(
"Echec de la validation de la transaction\n");
    exit();
}

/* Fermeture de la connexion */
mysqli_close($link);
?>

Voir aussi

add a note add a note

User Contributed Notes 5 notes

up
17
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
12
Lorenzo - webmaster AT 4tour DOT it
6 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
12
mvanlamz
6 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
0
NoMan2000
1 month ago
This is to clarify the Flags parameters and what they mean:

MYSQLI_TRANS_COR_AND_CHAIN:

Appends "AND CHAIN" to mysqli_commit or mysqli_rollback.

MYSQLI_TRANS_COR_AND_NO_CHAIN:

Appends "AND NO CHAIN" to mysqli_commit or mysqli_rollback.

MYSQLI_TRANS_COR_RELEASE:

Appends "RELEASE" to mysqli_commit or mysqli_rollback.

MYSQLI_TRANS_COR_NO_RELEASE:

Appends "NO RELEASE" to mysqli_commit or mysqli_rollback.

To clarify those options:

The AND CHAIN clause causes a new transaction to begin as soon as the current one ends, and the new transaction has the same isolation level as the just-terminated transaction.

The RELEASE clause causes the server to disconnect the current client session after terminating the current transaction.
up
-13
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