@mega-epic

Какой порядок выполнения скриптов PHP?

Новичок в php, вопрос следующий. Несколько пользователей на сайте в один момент делают одно и тоже действие(в моем случае хотят забронировать один и тот-же автомобиль на одно и то же время). Их клиенты ajax-ом вызывают скрипт на сервере и отправляют JSON с данными о бронировании (вот фрагмент):
if($_POST['query'] == "create"){
	$connect = mysqli_connect($config['DB_IP'], $config['DB_LOGIN'], $config['DB_PASS'], $config['DB_NAME']);
	$input_json = json_decode($_POST['json']);
	for($i = 0; $i < count($input_json->book); $i++){//в массиве book даты, на которые нужен авто
		$date = new DateTime($input_json->book[$i]);
		$check = mysqli_query($connect, "
		SELECT * 
			FROM schedule
				INNER JOIN booking
					ON schedule.booking = booking.id
						WHERE booking.auto = ". $input_json->car_id ."
						AND schedule.date = '". $date->format('Y-m-d') ."'
			");
	}
	if(mysqli_num_rows($check) == 0){
		$book = mysqli_query($connect, "INSERT INTO booking (verify,client,auto,comm) VALUES (0,".$input_json->client.",".$input_json->car_id.",'null')");
		$id_book = mysqli_insert_id($connect);
		$schedule = "INSERT INTO schedule (booking,date) VALUES ";
		for($i = 0; $i < count($input_json->book); $i++){
			if($i > 0) $schedule .= ",";
			$date = new DateTime($input_json->book[$i]); 
			$schedule .= "(".$id_book.",'".$date->format('Y-m-d')."')";
		}
		$schedule .= ";";
		$create = mysqli_query($connect, $schedule);
		echo 'ok'; 
	}
	else {
		echo 'error'; //на клиент возвращается ошибка, что машина уже забронирована на это время
	}

В цикле проверяется, нет ли в базе данных бронирований на те дни, на которые хочет пользователь. Если нету, то условие выполняется и в базу записывается новое бронирование. Соответственно кто первый успел, того и сапоги.
В чем суть вопроса: Как выполняются скрипты? Если параллельно, то получается что может произойти коллизия - например в двух одновременно запущенных скриптах проверка в бд ничего не найдет, и сработает условие на запись, а там . Правильно я понимаю?
  • Вопрос задан
  • 99 просмотров
Решения вопроса 1
gobananas
@gobananas
finishhim.ru
В целом вы понимаете всё правильно. Суть в том что мы люди, для нас клик с разницей в одну сотую секунды это "одновременно" а для машины нет. Тот кто первый - забронирует. Тот кто второй - получит ошибку. Если сомневаетесь - перед запросом заблокируйте таблицу
LOCK TABLES
после запроса разблокируйте
UNLOCK TABLES
Но аккуратнее с этим, при большом количестве запросов это может создать проблемы
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
25 апр. 2024, в 11:20
1000 руб./за проект
25 апр. 2024, в 11:02
5000 руб./за проект
25 апр. 2024, в 10:42
150000 руб./за проект