Суть такая, учусь использовать mysqli, раньше работал с mysql через фреймворк, тут решил для скриптов которые в cron будут записаны написать код без фреймворка, разобраться что да как да и работает так быстрее.
Код следующий - сначала получаем данные по городам(для тестов выборку одним конкретным ограничил
$mysqli->real_query("SELECT * FROM sd_hotellook_cityids WHERE id=12153");
$query = $mysqli->store_result();
while ($city = $query->fetch_assoc()) {
}
После удаляю на основе полученных данных записи в таблицах, которые будут обновлены новой информацией
$del = ("DELETE FROM sd_hotellook_hotels WHERE cityId = '" . $city['id'] . "'; ");
$del .= ("DELETE FROM sd_hotellook_hotels_shortFacilities WHERE cityid = '" . $city['id'] . "';");
$del .= ("DELETE FROM sd_hotellook_hotels_photos WHERE cityid = '" . $city['id'] . "'; ");
$del .= ("DELETE FROM sd_hotellook_hotels_facilities WHERE cityId = '" . $city['id'] . "';");
if(!$mysqli->multi_query($del))
{
echo 'Delete Error: '.$mysqli->error.'<br />';
}
Тут все выполняется нормально.
Дальше я запрашиваю у внешнего сервера список отелей для этого города
И разбираю полученный JSON
for ($i = 0; $i <= count($return['hotels']); $i++) {
}
При каждой итерации обрабатываются данные по каждому полученному отелю и собирается достаточно объемный запрос в переменную $sql (один запрос на одну итерацию)
Которую потом выполняем так
if(!empty($sql))
{
if(!$mysqli->multi_query($sql))
{
echo 'Insert '.$i.' Error: '.$mysqli->error.'<br />';
}
}
Собственно тут получаем ошибку (много ошибок вернее, так как цикл не останавливается на ошибке)
Insert 0 Error: Commands out of sync; you can't run this command now
Но мне непонятно как ее нужно исправить. Поискав в интернете натыкаюсь на такое
A.2.12 Ошибка в клиенте Commands out of sync
Если получена ошибка Commands out of sync; you can't run this command now в клиентском коде, то клиентские функции вызываются в неправильном порядке!
Это может произойти, например, если используется mysql_use_result() и делается попытка выполнить новый запрос до того, как вызвана mysql_free_result(), или если клиент пытается выполнить два возвращающих данные запроса без обращения к mysql_use_result() либо mysql_store_result() в промежутке между ними.
www.mysql.ru/docs/man/Commands_out_of_sync.html
Однако у меня всего один запрос возвращающий данные(с SELECT). После while цикла прописано
mysqli_free_result($query);
но это выполняется после ошибки уже.
Что я не так понял или где нужно исправить?