mysqli::begin_transaction

mysqli_begin_transaction

(PHP 5 >= 5.5.0, PHP 7, PHP 8)

mysqli::begin_transaction -- mysqli_begin_transactionStartet eine Transaktion

Beschreibung

Objektorientierter Stil

public mysqli::begin_transaction(int $flags = 0, ?string $name = null): bool

Prozeduraler Stil:

mysqli_begin_transaction(mysqli $mysql, int $flags = 0, ?string $name = null): bool

Beginnt eine Transaktion; benötigt die InnoDB-Engine (sie ist standardmäßig aktiviert). Für weitere Details über die Funktionsweise von MySQL-Transaktionen siehe » http://dev.mysql.com/doc/mysql/en/commit.html.

Parameter-Liste

mysql

Nur bei prozeduralem Aufruf: ein von mysqli_connect() oder mysqli_init() zurückgegebenes mysqli-Objekt.

flags

Gültige Flags sind:

  • MYSQLI_TRANS_START_READ_ONLY: Startet die Transaktion als "START TRANSACTION READ ONLY" (nur lesend). Benötigt MySQL 5.6 oder höher.

  • MYSQLI_TRANS_START_READ_WRITE: Startet die Transaktion als "START TRANSACTION READ WRITE" (lesend und schreibend). Benötigt MySQL 5.6 oder höher.

  • MYSQLI_TRANS_START_WITH_CONSISTENT_SNAPSHOT: Startet die Transaktion als "START TRANSACTION WITH CONSISTENT SNAPSHOT".

name

Name des Sicherungspunkts für die Transaktion

Rückgabewerte

Gibt bei Erfolg true zurück. Bei einem Fehler wird false zurückgegeben.

Changelog

Version Beschreibung
8.0.0 name ist nun nullable (akzeptiert den null-Wert).

Beispiele

Beispiel #1 mysqli::begin_transaction()-Beispiel

Objektorientierter Stil

<?php

/* mysqli anweisen, eine Ausnahme auszulösen, wenn ein Fehler auftritt */
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* Die Tabellen-Engine muss Transaktionen unterstützen */
$mysqli->query("CREATE TABLE IF NOT EXISTS language (
Code text NOT NULL,
Speakers int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;"
);

/* Transaktion starten */
$mysqli->begin_transaction();

try {
/* Ein paar Werte einfügen */
$mysqli->query("INSERT INTO language(Code, Speakers) VALUES ('DE', 42000123)");

/* Versuchen, ungültige Werte einzufügen */
$language_code = 'FR';
$native_speakers = 'Unknown';
$stmt = $mysqli->prepare('INSERT INTO language(Code, Speakers) VALUES (?,?)');
$stmt->bind_param('ss', $language_code, $native_speakers);
$stmt->execute();

/* Wenn der Code bis hierher fehlerfrei ist, die Daten in der Datenbank bestätigen */
$mysqli->commit();
} catch (
mysqli_sql_exception $exception) {
$mysqli->rollback();

throw
$exception;
}

Prozeduraler Stil

<?php

/* mysqli anweisen, eine Ausnahme auszulösen, wenn ein Fehler auftritt */
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

$mysqli = mysqli_connect("localhost", "my_user", "my_password", "world");

/* Die Tabellen-Engine muss Transaktionen unterstützen */
mysqli_query($mysqli, "CREATE TABLE IF NOT EXISTS language (
Code text NOT NULL,
Speakers int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;"
);

/* Transaktion starten */
mysqli_begin_transaction($mysqli);

try {
/* Ein paar Werte einfügen */
mysqli_query($mysqli, "INSERT INTO language(Code, Speakers) VALUES ('DE', 42000123)");

/* Versuchen, ungültige Werte einzufügen */
$language_code = 'FR';
$native_speakers = 'Unknown';
$stmt = mysqli_prepare($mysqli, 'INSERT INTO language(Code, Speakers) VALUES (?,?)');
mysqli_stmt_bind_param($stmt, 'ss', $language_code, $native_speakers);
mysqli_stmt_execute($stmt);

/* Wenn der Code bis hierher fehlerfrei ist, die Daten in der Datenbank bestätigen */
mysqli_commit($mysqli);
} catch (
mysqli_sql_exception $exception) {
mysqli_rollback($mysqli);

throw
$exception;
}

Anmerkungen

Hinweis:

Diese Funktion funktioniert nicht mit Tabellentypen, die keine Transaktionen unterstützen (wie MyISAM oder ISAM).

Siehe auch