@bozilly

Как написать транзакцию?

В PHP и MySQL несилен. Да и не нужно мне это. Беглый взгляд в гугл не помог, поэтому надеюсь на добрых людей.
Нужно сделать транзакцию.
Т.е.
Выполняем INSERT 1
Выполняем INSERT 2
Выполняем INSERT 3

Если в каком-то запросе что-то не получится, должно все "откатиться".
  • Вопрос задан
  • 335 просмотров
Решения вопроса 1
@Wol_fi
php, js, mysql, highload
Сначала установите в бд
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');
}

Не забывайте выходить из транзакции(коммит\роллбэк), иначе сервер повиснет.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы