2016-03-23 16 views
0

Ich habe diesen Code, versuchen, Transaktion zu verwenden.PHP Mysqli Transaktion funktioniert nicht

try 
{ 
    $mysqli->autocommit(FALSE); // Line (1) 

    $queries = $query_delete_atividades . $query_insert_atividades . "SET NAMES 'utf8';" . $query_anuncio; 

    if ($mysqli->multi_query($queries) === TRUE) { 
     $resultado = '[{ "resultado" : "ok"}]'; 
     return $resultado; 
    } else { 
     return ""; 
    } 

    $mysqli->autocommit(TRUE); // Line (2) 
    mysqli_commit($mysqli); // Line (3) 

    $query_error = mysqli_error($mysqli); 

    if (strlen($query_error) == 0) 
    { 
    $resultado = '[{ "resultado" : "ok"}]'; 
    return $resultado; 
    } 
} 
catch (Exception $e) 
{ 
    mysqli_rollback($mysqli); // Line (4)  
} 

in der Variablen $ Abfragen Ich habe drei Arten von Abfragen:

  • Ein Update
  • A
  • Einige Einsätze löschen

Wenn ich die Zeilen Kommentar (1), (2), (3) und (4) werden alle Abfragen korrekt ausgeführt (aktualisieren, löschen und einfügen).

Mit diesen Zeilen unkommentiert passiert nichts in der Datenbank.

Meine Abfragen sind korrekt und verifiziert.

Ist dieser Code korrekt? Was mache ich falsch ?

Danke.

+1

Sie müssen rufen [ '$ mysqli-> begin_transaction()'] (http://php.net/manual/en/mysqli.begin-transaction .php) –

+0

Nein, w ja. Das Problem besteht weiter. – Olivertech

Antwort

0

Transaktion wird nie mit dem Code arbeiten Sie, bis Sie verwenden aktualisieren Sie diesen Code nicht return Logik vor Rückkehr commit

if ($mysqli->multi_query($queries) === TRUE) { 
    $resultado = '[{ "resultado" : "ok"}]'; 
    return $resultado; 
} else { 
    return ""; 
} 

Als nach dieser Codeausführung Sie die Kontrolle von try-Block zur vorherigen Funktion zurückkehren, so mit diesem Code mit der Transaktion fortzufahren you need to change commit position wie folgt aus:

if ($mysqli->multi_query($queries) === TRUE) { 
    $resultado = '[{ "resultado" : "ok"}]'; 

    mysqli_commit($mysqli); // Line (3) 

    /* commit internally sets auto commit to true so $mysqli->autocommit(TRUE); // Line (2) not required */ 
    return $resultado; 
} else { 
    return ""; 
}