Задать вопрос
@Richard_Ferlow
Веб-программист

Как в mysqli совершать транзакции при multi_query?

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

Собственно, когда пытаюсь использовать, действую по примерам

$mysqli->real_query("SELECT * FROM sd_hotellook_cityids  WHERE  countryid != 0 AND updated = 0 AND checked = 0 ORDER by id  LIMIT 3");
$query = $mysqli->store_result();
$mysqli->autocommit(FALSE);
while ($city = $query->fetch_assoc()) {

// здесь собираются все запросы в sql переменную для каждого города 

$sql .= ("INSERT sd_hotellook_hotels_shortFacilities (id, name,cityid) VALUES $shortFacilities; ");

//и потом выполняем 

    if (!empty($sql)) {
        if ($mysqli->multi_query($sql)) {
            do {
                // fetch results

                if (!$mysqli->more_results()) {
                    break;
                }
                if (!$mysqli->next_result()) {

                    echo 'Insert Error: ' . $mysqli->error . '<br />';
                    $error = 1;
                    break;
                }
            } while (true);
        }
    }



if( $error != 1){
            if (!$mysqli->commit())
            {
                echo 'Insert Error: ' . $mysqli->error . '<br />';
            }
        }else{
            $mysqli->rollback();
            exit();
        }

}


Но при этом упорно получаю ошибку "Commands out of sync; you can't run this command now". При этом если без транзакций, у меня все работало.

Код урезал при публикации, надеюсь, не напутал.
  • Вопрос задан
  • 2511 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы