Сегодня я уже спрашивал всякий познавательный для себя треш, но сейчас нужна помощь по составлению корректного mySQL запроса
function save_hero($player, $hero, $round) {
$query = "UPDATE `".CURRENT_SEASON."_players`
SET `roundHero_".$round."` = '".$hero."'
WHERE `name` = '".$player."'";
$sql = mysql_query($query) or call_user_func('db_connect_error');
if(mysql_affected_rows() > 0) {
header("Location: ".$_SERVER['REQUEST_URI']);
exit();
}
} /* endFunction */
К этому запросу нужно добавить еще один, но в другую таблицу. Только не в виде второго отдельного запроса, а реализовать как один
"UPDATE `heroes` SET `vision` = 0 WHERE `id` = ".$id.";
Связать таблицы можно по id
Спустя 1 час, 33 минуты, 22 секунды (4.09.2012 - 03:03) inpost написал(а):
2 отдельных запроса.
Спустя 9 минут, 40 секунд (4.09.2012 - 03:12) NierRa написал(а):
Благодарю, как связать эти запросы так, чтобы в случае неудачного обновления одного из них - второй либо не исполнился, либо откатился
Я пока временно сделал так, но понимаю, что это не выход, так как тут только редирект попадает под проверку
Я пока временно сделал так, но понимаю, что это не выход, так как тут только редирект попадает под проверку
function save_hero($player, $hero, $round) {
$query_hero = "UPDATE `".CURRENT_SEASON."_players`
SET `roundHero_".$round."` = '".$hero."'
WHERE `name` = '".$player."'";
$query_vision = "UPDATE `heroes`
SET `vision` = 0
WHERE `alias` = '".$hero."'";
$query_player = "UPDATE `".CURRENT_SEASON."_heroes`
SET `who_command` = '".$player."'
WHERE `alias` = '".$hero."'";
$sql_hero = mysql_query($query_hero) or call_user_func('db_connect_error');
if(mysql_affected_rows() > 0) {
$upd_hero = TRUE;
}
$sql_vision = mysql_query($query_vision) or call_user_func('db_connect_error');
if(mysql_affected_rows() > 0) {
$upd_vision = TRUE;
}
$sql_vision = mysql_query($query_player) or call_user_func('db_connect_error');
if(mysql_affected_rows() > 0) {
$upd_player = TRUE;
}
if($upd_hero and $upd_vision and $upd_player)
echo '<script>document.location.href = "'.PLACEMENT_REDIRECT.'"</script>';
} /* endFunction */
Спустя 1 час, 14 минут, 56 секунд (4.09.2012 - 04:27) inpost написал(а):
Почитай про транзакции. Это гарантия, что выполнится оба запроса.
У меня в практике 50 000 пользователей, из них всего 2 зарегистрировались без второй таблицы(!). Я имею ввиду без транзакций запрос делал.
У меня в практике 50 000 пользователей, из них всего 2 зарегистрировались без второй таблицы(!). Я имею ввиду без транзакций запрос делал.
Спустя 4 часа, 5 минут, 34 секунды (4.09.2012 - 08:33) T1grOK написал(а):
inpost - здесь конечно важный фактор отказоустойчивость сервера на котором располагается хостинг. Там где у тебя 2 ошибки, у кого то может быть 20 из-за не столь стабильного железа или программного обеспечения.
Как ни крути, но транзакции вещь толковая.
Как ни крути, но транзакции вещь толковая.
Спустя 3 часа, 41 минута, 9 секунд (4.09.2012 - 12:14) inpost написал(а):
T1grOK
Конечно, я тоже склонен к транзакциям, а выше опыт для примера привёл, чтобы учились на чужих ошибках
Конечно, я тоже склонен к транзакциям, а выше опыт для примера привёл, чтобы учились на чужих ошибках

_____________
Задача на корректную обработку данных (мое решение)
http://eu.battle.net/sc2/ru/profile/2212951/1/IIIIIIIIIIII/