2011-01-26 24 views
8

Tôi đang chạy nhiều lần xóa thông qua mysqli :: multi_query và nó đang làm rối tung truy vấn tiếp theo trong dòng. bị ném."Lệnh không đồng bộ; bạn không thể chạy lệnh này ngay bây giờ" - Gây ra bởi mysqli :: multi_query

Error - SQLSTATE HY000. 
Sql error: Commands out of sync; you can't run this command now 

Tôi có cần xóa một cách nào đó tính đa tạp để không gây rối với truy vấn tiếp theo của mình không? Nguyên nhân của lỗi này là gì?

Và đây là cách tôi đang chạy multiquery tôi

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

Tôi đang sử dụng một phiên bản gần đây của XAMPP trên cửa sổ 7

Trả lời

10

Bằng cách sử dụng mysqli::multi_query bạn đang bắn ra các truy vấn, nhưng bạn cần phải xử lý kết quả của những truy vấn đó trước khi bạn tiếp tục. documentation page mô tả các cách xử lý kết quả khác nhau. Sau khi xử lý, bạn sẽ có thể thực hiện các truy vấn khác tốt.

Thông báo lỗi bạn đang gặp phải thực sự được giải thích tốt hơn một chút trên trang mysqli::query (mặc dù nhớ rằng mysqli :: truy vấn sẽ không trả lại đối tượng kết quả trong trường hợp này, vì bạn đang xóa).

Tất nhiên, bạn có thể thay đổi multi_query thành nhiều truy vấn đơn lẻ, tôi không biết ưu điểm/khuyết điểm của mỗi phương pháp là gì.

+3

Vì vậy, làm thế nào để xóa các truy vấn, vì tôi không nhận được bất cứ điều gì trở lại. Bạn đã không thực sự nói với tôi bất cứ điều gì mà tôi đã không biết. – andrew

+8

Giống như ... 'do {$ mysqli-> use_result(); } trong khi ($ mysqli-> next_result()) ' – ZoFreX

9

này đã giúp tôi xóa 'lệnh đồng bộ' lỗi:

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

Thêm mã này ngay sau khi gọi multi_query, nó sẽ sử dụng bộ kết quả và khắc phục lỗi.

-1

đang Seva của rất có thể sẽ khắc phục vấn đề của bạn, nếu bạn đang sử dụng phong cách thủ tục như tôi, sử dụng này

do { 
    if ($result = mysqli_store_result($connect)) { 
    mysqli_free_result($result); 
    } 
} while (mysqli_next_result($connect)); 
Các vấn đề liên quan