Транзакции PDO? - PullRequest
       4

Транзакции PDO?

1 голос
/ 08 декабря 2011

Нужно ли блокировать таблицы, если я использую транзакции PDO?

Если у пользователя a есть 50 денег и переводит 50 пользователю b, выполнит ли транзакция PDO все они без ошибок?

Кроме того, если, скажем, у меня есть оператор if, например,

if ($user['money'] > 500) {
     $dbc ->beginTransaction();
     .........
     $dbc ->commit();
}

Как я могу гарантировать, что значение денег пользователей не изменится, означая, что запрос не должен запускаться во время выполнения транзакции??Спасибо

Ответы [ 2 ]

1 голос
/ 25 декабря 2011

PDO - это уровень абстракции, поэтому он зависит от вашей базы данных.MySQL поддерживает транзакции, но только для таблиц InnoDB.В противном случае только с блокировками таблицы (что не то же самое).SQLite всегда поддерживает транзакции.Другая база данных может никогда не быть.

Транзакции по-прежнему требуют от вас (разработчика) создания и проверки логики.База данных не знает, что правильно (правильно, не просто), а что неправильно (неправильно).Вы делаете, поэтому вам нужно создать сценарий, который вызывает BEGIN и COMMIT / ROLLBACK, когда это необходимо.

Также стоит отметить: транзакция не автоматически ROLLBACKed после ошибки базы данных.(Возможно, некоторые базы данных или DBAL делают, но это не стандартно, и вы не должны на это рассчитывать.) Это означает, что ВЫ должны проверять результат / ответ / обратную связь каждого запроса И действовать соответствующим образом (например, вызывая ROLLBACK).1005 *

1 голос
/ 25 декабря 2011

Процесс транзакции гарантируется сервером SQL. Если beginTransaction () завершается успешно, commit () завершается успешно, а ваш SQL-сервер и таблица поддерживают транзакции, тогда вы можете быть в этом уверены.

...