Ich bin ziemlich neu in Transaktionen.PHP, MySQL, PDO-Transaktionen - Ist der Code innerhalb versuchen Block Stop bei commit()?
Vor, was ich tat, war so etwas wie:
Codeblock 1
$db = new PDO(...);
$stmt = $db->prepare(...);
if($stmt->execute()){
// success
return true;
}else{
// failed
return false;
}
Aber in einem Versuch, Gruppe mehrere Abfragen in einer einzigen Transaktion, ich bin jetzt mit so etwas wie :
Codeblock 2
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->beginTransaction();
try{
$stmt = $db->prepare(... 1 ...);
$stmt->execute();
$stmt = $db->prepare(... 2 ...);
$stmt->execute();
$stmt = $db->prepare(... 3 ...);
$stmt->execute();
$db->commit();
return true;
}catch(Exception $e){
// Failed, maybe write the error to a txt file or something
$db->rollBack();
return false;
}
Meine Frage ist: Wenn die Transaktion aus irgendeinem Grund fehlschlägt, stoppt der Code bei $db->commit();
und springt zum catch
Block? Oder würde der return true;
zuerst laufen, und dann würde es versuchen, an die catch
zu gehen? Denn wenn das der Fall ist, dann bin ich schon zurückgekehrt, und so würde es nicht zum catch
gehen. UND es hätte den falschen Wert zurückgegeben.
Muss ich immer noch so etwas wie die folgenden:
Codeblock 3
if($stmt->commit()){
return true;
}
oder genügt es, die Art, wie ich es in -Code Block 2 geschrieben haben?
sein Ja, wenn der Code Stopp bei '$ db-> commit();' dann Ausgabe von 'catch' Block zurückgegeben werden, so dass Sie nicht brauchen, um eine Bedingung hinzuzufügen, wie' wenn ($ stmt-> commit()) .... 'http://php.net/manual/de/pdo.transactions.php – pes502