Je suis en train de tester la transaction en php avec base de données MySQL (InnoDB) mais le rollback ne fonctionne pas ...
Ceci est mon code
<?php
$servername = "localhost";
$username = "root";
$password = "";
$database = "test";
$conn = mysqli_connect($servername, $username, $password, $database);
mysqli_autocommit($conn, FALSE);
mysqli_query($conn,"update person set Balance = 300 where Name = 'Jay'");
if ($conn->affected_rows > 0) {
mysqli_commit($conn);
echo "First Commited <br>";
mysqli_query($conn,"update person set Balance = 3000 where Name = 'Rv'");
if($conn->affected_rows > 0) {
mysqli_commit($conn);
echo "Second Commited <br>";
}else {
mysqli_rollback($conn);
echo "First rollback <br>";
}
}
mysqli_close($conn);
?>
est-il quelque chose de mal? (Je aussi essayer le style orienté objet en php, reportez-vous à partir here)
résultat SHOW CREATE TABLE personne de requête
Je pense que cela a à voir avec le commit après 'if ($ conn-> affected_rows'. Comme vu dans un exemple [ici] (http://php.net/manual/en/mysqli.commit.php#refsect1-mysqli .commit-examples) il y a plusieurs requêtes exécutées avant d'appeler commit, et autocommit n'a jamais été réinitialisé à – Jelmergu
Pouvez-vous confirmer exactement ce qui se passe? mises à jour? ou juste un? Vous ne devez pas mélanger les procédures avec les styles orientés objet, en choisir un. – mickmackusa
Si l'exécution de la deuxième requête a échoué, la première validation devrait être annulée selon le bloc else mais cela ne fonctionne pas, commit ne rollback pas –