2011-01-26 4 views
8

Uruchamiam wiele operacji usuwania przez mysqli :: multi_query i mylę następne zapytanie w wierszu. Wystąpił następujący błąd bycie rzuconym."Polecenia niezsynchronizowane, nie możesz teraz uruchomić tej komendy" - Spowodowane przez mysqli :: multi_query

Czy muszę wyczyścić wielowątkowość, aby nie zepsuć następnego zapytania? Jaka jest przyczyna tego błędu?

I tak używam mojego multiquery

function deleteSomeTables($args){ 
    $sql = 'delete 1;delete another;'; 
    if($database->multi_query($sql)){ 
    return true; 
    }else{ 
    return false; 
    } 
} 

Używam najnowszej wersji xampp na windows 7

Odpowiedz

10

Korzystając mysqli::multi_query jesteś wystrzelenie zapytań, ale trzeba obsłużyć wyniki tych zapytań, zanim przejdziesz dalej. documentation page opisuje różne sposoby obsługi wyników. Po przetworzeniu będziesz w stanie wykonywać inne zapytania dobrze.

Komunikat o błędzie, który napotkasz, jest wyjaśniony nieco lepiej na stronie dla mysqli::query (chociaż pamiętaj, że mysqli :: query nie zwróci obiektu wynikowego w tym przypadku, ponieważ robisz usuwanie).

Oczywiście można zmienić wiele zapytań na wiele pojedynczych zapytań, nie wiem jakie są plusy i minusy każdego podejścia.

+3

Więc jak mam wyczyścić zapytanie, ponieważ ja nie dostaję nic wrócił. Nie powiedziałeś mi nic, o czym już nie wiedziałem. – andrew

+8

Coś jak ... 'do {$ mysqli-> use_result(); } while ($ mysqli-> next_result()) ' – ZoFreX

9

To pomogło mi usunąć „Polecenia zsynchronizowane” błędu:

do { 
    $mysqli_conn_obj->use_result(); 
}while($mysqli_conn_obj->more_results() && $mysqli_conn_obj->next_result()); 

Dodaj ten kod tylko po wywołaniu multi_query, będzie korzystać z zestawów wyników i rozwiązać problem.

-1

kod Seva będzie najprawdopodobniej rozwiązać swój problem, jeśli używasz stylu proceduralnym jak ja, użyj tego

do { 
    if ($result = mysqli_store_result($connect)) { 
    mysqli_free_result($result); 
    } 
} while (mysqli_next_result($connect));