Использование транзакций в программах на 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)
);
}

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела MySQL на эту тему:
Альтернативы транзакциям
Выполнение транзакций в программах
Выполнение транзакций средствами SQL
Использование транзакций в программах на Java
Использование транзакций в программах на Perl

Вернуться в раздел: MySQL / 15. Выполнение транзакций