Mysqli_begin_transaction правильное использование

Мне нужен транзакционный mysql в моем PHP, я просмотрел документацию PHP, и мне нужно использовать несколько функций,

mysqli_begin_transaction
mysqli_rollback
mysqli_commit

В настоящее время мой код выглядит так:

mysqli_begin_transaction($db_link, MYSQLI_TRANS_START_READ_WRITE);  
$sql = "SELECT * FROM table";  
$result = mysqli_query($sql);  
if (!$result){
    $rollback = true;  
}
$sql = "SELECT * FROM another";
$result = mysqli_query($sql);  
if (!$result){
    $rollback = true;
}
$sql = "DELETE FROM table_name WHERE condition;"
mysqli_query($sql);
if (mysqli_affected_rows($db_link) < 0){
    $rollback = true;
}
if ($rollback){
    mysqli_rollback($db_link)
} else {
    mysqli_commit($db_link)
}

Это очень грубый псевдокод, но мой вопрос в том, что функция транзакции все возвращает значения в соответствии с документацией php, поэтому я должен заключать их в условные операторы и генерировать исключение чего-то похожего, если они не возвращают истину.

ПОЧЕМУ вы устанавливаете $rollback = true; после неудачного ВЫБОРА, при выборе ничего не меняется

RiggsFolly 15.11.2018 15:26

Возможно, ваш реальный код значительно отличается (в этом случае вы действительно должны показывать тот), но то, что у вас здесь, действительно не лучший вариант использования для транзакций.

Patrick Q 15.11.2018 15:28

Также обратите внимание на secure.php.net/manual/en/mysqli.autocommit.php

Lithilion 15.11.2018 15:30

Обычно вы используете транзакцию для поддержания целостности базы данных, что обычно означает, что вы обновляете более одной таблицы, например, в отношениях родитель-потомок. Так, например, Create Invoice, создайте 3 позиции счета-фактуры. Вы обертываете все 4 вставки в транзакции, чтобы убедиться, что в случае сбоя одной вставки вы не получите счет-фактуру и только одну позицию.

RiggsFolly 15.11.2018 15:31

Мой код очень отличается, но я не разглашаю информацию, поэтому не хочу его публиковать. Дело остается, если я буду делать if (mysqli_rollback($dblink)) {}

Udders 15.11.2018 15:42

Что ж, в этом сенарио, поскольку у вас есть только ОДНО УДАЛЕНИЕ, оно либо сработает, либо не сработает. Если он не работает, откатывать нечего, если он работает, было мало смысла начинать транзакцию, так как без нее рабочее удаление удалит

RiggsFolly 15.11.2018 15:44

По сути, этот сценарий НЕ является хорошим примером того, когда, почему и как следует использовать транзакции.

RiggsFolly 15.11.2018 15:45

Мы не можем посоветовать вам код, который мы не видим. Я скажу вот что: знаете ли вы, что бы вы сделали с информацией о том, возвращают ли функции true? Если вы не предпримете значимых действий по этому поводу, тогда в этом нет никакого смысла, не так ли?

Patrick Q 15.11.2018 15:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
8
269
0

Другие вопросы по теме