Можно ли делать транзакции базы данных mysql и откаты с php? - PullRequest
3 голосов
/ 01 июня 2009

пример: перевод платежа от пользователя A к пользователю B. Аккаунт пользователя A: -10 USD Аккаунт пользователя B: +10 USD

если есть транзакция и что-то идет не так, все отменяется. Таким образом, с транзакциями не произойдет, что учетная запись пользователя A уменьшится на 10, а учетная запись пользователя B не увеличится на 10.

Я знаю, что Java-люди используют транзакции и откаты повсюду. Но я никогда не слышал, чтобы PHP-парни делали это.

Ответы [ 2 ]

5 голосов
/ 01 июня 2009
$db = new mysqli("localhost", "", "", "");
$db->autocommit(FALSE);
if ($db->query("INSERT ..."))
    $db->commit();
else
    $db->rollback();

Убедитесь, что ваши таблицы используют InnoDB engine: MyISAM не поддерживает транзакции.

Обновление комментария :

InnoDB - это один из двух основных механизмов хранения, используемых MySQL, другой - MyISAM.

MySQL поставляется с поддержкой InnoDB, скомпилированной по умолчанию, и фактически для ее отключения требуется некоторое усилие.

Я никогда не слышал о MySQL с отключенным InnoDB даже самым дешевым из хостеров.

1 голос
/ 01 июня 2009

Если вы используете pdo, он также поддерживает транзакции

http://us2.php.net/manual/en/pdo.begintransaction.php

Как уже было сказано, убедитесь, что вы используете механизм хранения innoDB.

...