Ich habe Probleme mit Transaktionen in PHP-Skript. Ich möchte mehrfache Abfragen durchführen und sie alle abrufen können, wenn mindestens einer von ihnen fehlschlägt. Im Folgenden finden Sie ein einfaches Beispiel für das Skript finden Ich verwende:PHP PDO - Es gibt keine aktive Transaktion
Uncaught exception 'PDOException' with message 'There is no active transaction'
Wenn ich die Zeile löschen: $ conn-> rollback()
$tags_input = array(6,4,5);
$conn = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8',
DB_USER, DB_PASSW, array(
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
$conn->beginTransaction();
$sql = "INSERT INTO projects (id, pr_id, enabled) VALUES (:val0, :val1, :val2)";
$stmt = $conn->prepare($sql);
if(count($tags_input)>0){
for($i = 0;$i<count($tags_input);$i++){
$stmt->bindValue(':val0', 57);
$stmt->bindValue(':val1', $tags_input[$i]);
$stmt->bindValue(':val2', 'Y');
$result = $stmt->execute();
}
}
$res1 = $conn->commit();
$conn->rollBack();
nun dieses Beispiel einen Fehler erzeugt ; Der Fehler verschwindet, daher kann ich nicht verstehen, warum pdo-Objekt keine offene Transaktion sehen kann (Begintransaction und Commit erzeugen keine Fehler). Ich habe auch versucht, rollBack() innerhalb der Transaktion zu setzen, machte aber keinen Unterschied. Ich habe immer noch einen Fehler erhalten. Es gibt keine aktive Transaktion.
Ich verwende PHP 5.6 und Mysql Tabellen auf InnoDB.
Du commiting die Transaktion hier: '$ res1 = $ conn-> commit();', so dass Sie nicht – e4c5
versuchen Rollback können Sie Ihren Transaktionscode zu einer Try-catch-Anweisung wie im ersten Beispiel Einwickeln in http://php.net/manual/de/pdo.transactions.php –
https://phpdelusions.net/pdo#transactions –