Обеспечение того, чтобы пользователи получали правильную информацию из заявления mysql? - PullRequest
0 голосов
/ 09 декабря 2011

Я пытаюсь создать простой сайт покупки и продажи (только с притворными деньгами) для проекта, над которым я работаю.

У пользователей могут быть деньги в их руках или в их виртуальном банке, так сказать,Я использую эту транзакцию, когда пользователи вносят деньги из своей руки на свой счет, завернутый в PHP, если заявление:

if ($_POST['deposit'] > 0 && $_POST['deposit'] <= $user['money']) {
     $dbc -> beginTransaction();
     $dbc -> query("SELECT id FROM items WHERE id = " . $user['id'] . " FOR UPDATE LIMIT 1");
     $q = $dbc -> prepare("UPDATE items SET money = money-?, bank = bank+?");
     $q -> execute(array($_POST['deposit'], $_POST['deposit']));
     $dbc -> commit();
}

Другие учетные записи также могут просматривать информацию о пользователях, например их сумму денег.Если учетная запись просматривает данные пользователя так же, как он вносит деньги на свой счет, будет ли приведенный выше запрос гарантировать, что они получат правильные непротиворечивые данные из mySQL?

Я получаю всю информацию из учетной записи с помощью;

$dbc -> query("SELECT * FROM items WHERE id = " . $account['id'] . ");

Если учетная запись получает доступ к данным пользователя так же, как он вносит деньги, будет ли запрос mySQL ждать новых обновленных строк?Я хотел бы просто убедиться, что все мои запросы согласованы в моем проекте

Также можно ли использовать LIMIT 1 в запросе SELECT FOR UPDATE?

1 Ответ

0 голосов
/ 09 декабря 2011

Используйте InnoDB для целостности транзакций, и вы получите то, что хотите.

Что касается LIMIT 1, вы действительно очень разумно спроектируете свою таблицу, поэтому невозможно выбрать более одной строки для обновления, используя первичный ключ для выбора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...