Написал вот такой код, но он не работает как надо, то есть всё-равно добавляет часть данных. Если например даже сделать ошибку в таблице role и написать в поле не role а rol, данные всё-равно добавляются тогда в таблицу users, а по идеи вроде как не должны. try { $dbh->beginTransaction(); $dbh->exec("insert into users (login) values ('Bill')"); $lastInsertId = $dbh->lastInsertId(); $dbh->exec("insert into role (role) values ($lastInsertId)"); throw new PDOException("неожиданная ошибка PDO!"); $dbh->commit(); echo "Вставлено ID: $lastInsertId"; } catch(PDOException $e) { $dbh->rollBack(); echo "rollback<br/>"; echo $e->getMessage(); }
You should not throw a PDOException from your own code. Короче кидай throw new Exception и соответственно catch на него.