Мне нужен транзакционный 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, поэтому я должен заключать их в условные операторы и генерировать исключение чего-то похожего, если они не возвращают истину.
Возможно, ваш реальный код значительно отличается (в этом случае вы действительно должны показывать тот), но то, что у вас здесь, действительно не лучший вариант использования для транзакций.
Также обратите внимание на secure.php.net/manual/en/mysqli.autocommit.php
Обычно вы используете транзакцию для поддержания целостности базы данных, что обычно означает, что вы обновляете более одной таблицы, например, в отношениях родитель-потомок. Так, например, Create Invoice, создайте 3 позиции счета-фактуры. Вы обертываете все 4 вставки в транзакции, чтобы убедиться, что в случае сбоя одной вставки вы не получите счет-фактуру и только одну позицию.
Мой код очень отличается, но я не разглашаю информацию, поэтому не хочу его публиковать. Дело остается, если я буду делать if (mysqli_rollback($dblink)) {}
Что ж, в этом сенарио, поскольку у вас есть только ОДНО УДАЛЕНИЕ, оно либо сработает, либо не сработает. Если он не работает, откатывать нечего, если он работает, было мало смысла начинать транзакцию, так как без нее рабочее удаление удалит
По сути, этот сценарий НЕ является хорошим примером того, когда, почему и как следует использовать транзакции.
Мы не можем посоветовать вам код, который мы не видим. Я скажу вот что: знаете ли вы, что бы вы сделали с информацией о том, возвращают ли функции true? Если вы не предпримете значимых действий по этому поводу, тогда в этом нет никакого смысла, не так ли?






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