Использование транзакций в программах на PHP

Задача
Вы хотите выполнить транзакцию в PHP-сценарии.

Решение
Запускайте предложения SQL, которые начинают и завершают транзакции.

Обсуждение
В PHP нет специального механизма транзакций, так что следует непосредственно создавать соответствующие предложения SQL. То есть вы можете или использовать BEGIN для начала транзакции, или самостоятельно включать и выключать режим автофиксации, используя SET AUTOCOMMIT. В следующем примере используется BEGIN. Предложения транзакции помещены в функцию, чтобы избежать ненужной проверки ошибок. Чтобы определить, нужно ли произвести откат, нужно просто проверить результат функции:

function do_queries ($conn_id)
{
# передать деньги от одного человека другому
if (!mysql_query ("BEGIN", $conn_id))
return (0);
if (!mysql_query ("UPDATE money SET amt = amt - 6 WHERE name = 'Eve'", $conn_id))
return (0);
if (!mysql_query ("UPDATE money SET amt = amt + 6 WHERE name = 'Ida'", $conn_id))
return (0);
if (!mysql_query ("COMMIT", $conn_id))
return (0);
return (1);
}
if (!do_queries ($conn_id))
{
print ("Transaction failed, rolling back. Error was:\n"
. mysql_error ($conn_id) . "\n");
mysql_query ("ROLLBACK", $conn_id);
}


Функция do_queries() проверяет каждый метод и возвращает «ложь», если хотя бы один из них не выполнен. Такой вид проверки применяется в тех случаях, когда может потребоваться провести дополнительную обработку между предложениями или после выполнения предложений, но до возвращения успешного результата. В приведенном примере никакой дополнительной обработки не требуется, и можно переформулировать do_queries() как одно длинное предложение:

function do_queries ($conn_id){
# передать деньги от одного человека другому
return
(
mysql_query ("BEGIN", $conn_id)
&&
mysql_query ("UPDATE money SET amt = amt - 6 WHERE name = 'Eve'", $conn_id)
&&
mysql_query ("UPDATE money SET amt = amt + 6 WHERE name = 'Ida'", $conn_id)
&&
mysql_query ("COMMIT", $conn_id)
);
}
Теги:
Выполнение транзакций
Добавлено: 23 Июля 2018 20:49:31 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...