Я пытаюсь создать четыре таблицы в одной транзакции PDO.
Когда первая часть оператора CREATE TABLE ... содержит ошибки, я успешно получаю исключение, сообщение об ошибке и откат,Но когда первая часть «CREATE TABLE ...» написана правильно (как в примере ниже), я не получаю исключения, фиксирую и создаю только первую таблицу.
Вот код:
$conn = Connection::getInstance();
$conn->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->dbh->beginTransaction();
$stmt = $conn->dbh->prepare("
CREATE TABLE IF NOT EXISTS `1st table` (valid SQL-code)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;
CREATE TABLE IF NOT EXISTS `2nd table` (SQL-code with an error)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;
CREATE TABLE IF NOT EXISTS `3rd table`...
CREATE TABLE IF NOT EXISTS `4th table`...
");
try
{
$stmt->execute();
$conn->dbh->commit();
}
catch (Exception $e)
{
$conn->dbh->rollBack();
echo $e->getMessage();
}
unset($stmt);
После некоторых исследований я обнаружил следующее note на php.net:
Некоторые базы данных, включая MySQL, автоматически выдают неявный COMMIT, когда оператор языка определения баз данных (DDL)например, DROP TABLE или CREATE TABLE выдается в транзакции.
Это то, что вызывает проблему и как ее решить?