Сначала установите в бд
SET autocommit=0;
по умолчанию включено, затем
START TRANSACTION;
UPDATE posts SET status='approved' where post_id='id' AND status != 'approved';
SELECT ROW_COUNT() INTO @affected_rows;
-- .. другие запросы ...
IF (affected_rows > 0) THEN //если кол-во затронутых строк больше нуля, коммитим
COMMIT;
ELSE //иначе возвращаем
ROLLBACK;
END IF
На php может выглядеть примерно так:
$connection = new PDO();
$connection->query('START TRANSACTION;')
$response = $connection->query("UPDATE posts SET status='approved' where post_id='id' AND status != 'approved';");
if ($response->rowCount() > 0){
$connection->query('COMMIT');
} else {
$connection->query('ROLLBACK');
}
Не забывайте выходить из транзакции(коммит\роллбэк), иначе сервер повиснет.