Ich versuche Transaktion in PHP mit MySQL-Datenbank (InnoDB) zu testen, aber das Rollback nicht funktioniert ...
Dies ist mein 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);
?>
Gibt es etwas falsch? (Ich habe auch objektorientiert in PHP versuchen, Nachnahme here)
SHOW CREATE TABLE Person Abfrageergebnis
Ich denke, es hat mit dem Commit nach 'if ($ conn-> affected_rows 'zu tun. Wie in einem Beispiel [hier] (http://php.net/manual/en/mysqli.commit.php#refsect1-mysqli commit-examples) Es werden mehrere Abfragen ausgeführt, bevor Commit aufgerufen wird, und autocommit wird nie auf true zurückgesetzt – Jelmergu
Können Sie genau bestätigen, was passiert? Aktualisierung? oder nur einer? Sie sollten prozedurale mit objektorientierten Stilen nicht mischen, wählen Sie einfach einen aus. – mickmackusa
Wenn die Ausführung der zweiten Abfrage fehlgeschlagen ist, sollte der erste Commit nach dem else Block zurückgesetzt werden, aber es funktioniert nicht, commit wird nicht zurückgesetzt –