@Richard_Ferlow
Веб-программист

Mysqli: Commands out of sync; — как исправить чтобы не было ошибки?

Суть такая, учусь использовать 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); но это выполняется после ошибки уже.

Что я не так понял или где нужно исправить?
  • Вопрос задан
  • 6159 просмотров
Пригласить эксперта
Ответы на вопрос 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Судя по следующему вопросу, этот уже решен. Ну, просто для других читателей - перед тем, как выполнять следующий запрос, надо прочитать информацию обо всех запросах, выполненных через мультиквери, с помощью next_result()

А лучше вообще не пользоваться этой функцией, а выполннять запросы по отдельности, используй prepared statements
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы