Я пробую транзакции PDO в первый раз. Приведенный ниже код не работает. адрес электронной почты, который мы пытаемся вставить, имеет дубликат, поэтому он должен потерпеть неудачу. Это дает мне ошибку. но первая вставка вставляется в БД, и она не откатывается. Я знаю откат работы, потому что если я переместу PDO :: rollBack в Try {перед фиксацией, он откатится. Я думаю, что проблема в том, что он не перехватывает ошибку, поэтому не вызывает PDO :: rollBack. Есть идеи?
try {
PDO::beginTransaction();
$sql = "INSERT INTO .`tblUsersIDvsAgencyID` (`id`, `agency_id`) VALUES (NULL, :agencyID)";
$STH = $this->prepare($sql);
$STH->bindParam(':agencyID', $AgencyUser['agency_id']);
$STH->execute();
$userID = parent::lastInsertId();
$sql = "INSERT INTO `tblUsersEmailAddress` (`id`, `user_id`, `email_address`, `primary`, `created_ts`, `email_verified`) VALUES (NULL , :userID , :EmailAddress , '1', CURRENT_TIMESTAMP , '0' )";
$STH = $this->prepare($sql);
$STH->bindParam(':userID', $userID);
$STH->bindParam(':EmailAddress', $email_address);
$STH->execute();
PDO::commit();
echo 'Data entered successfully<br />';
}
catch(PDOException $e)
{
/*** roll back the transaction if we fail ***/
PDO::rollBack();
echo "failed";
}