2013-05-02 39 views
6

Các tài liệu về Lỗi Được đề cập trong tiêu đề nóiTại sao tôi nhận được lỗi "lệnh đồng bộ; bạn không thể chạy lệnh này ngay bây giờ"

Nếu bạn nhận được Commands đồng bộ; bạn không thể chạy lệnh này ngay bây giờ trong mã khách hàng của bạn, bạn đang gọi các chức năng của khách hàng theo thứ tự sai.

Điều này có thể xảy ra, ví dụ: nếu bạn đang sử dụng mysql_use_result() và hãy thử thực hiện truy vấn mới trước khi bạn đã gọi mysql_free_result(). Nó cũng có thể xảy ra nếu bạn cố gắng thực hiện hai truy vấn trả về dữ liệu mà không cần gọi mysql_use_result() hoặc mysql_store_result() ở giữa.

Từ đây: http://dev.mysql.com/doc/refman/5.0/en/commands-out-of-sync.html

Nhưng Trong Query Đầu tiên tôi không lấy bất kỳ dữ liệu từ cơ sở dữ liệu mysql, tôi chỉ chèn. Và trong lần truy vấn thứ hai, tôi nhận được dữ liệu từ cơ sở dữ liệu.

Đây là mã của tôi

$connection = mysqli_connect("localhost","username","password","tbl_msgs"); 
if(mysqli_connect_errno($connection)) 
{ 
    die("Failed to connect to MySQL: " . mysqli_connect_error()); 
} 
$query = "INSERT INTO users (total_comments, total_views) 
      VALUES ({$total_comments}, {$total_views});"; 

$query .= "INSERT INTO msgs (notifications) VALUES ({$notifications})"; 

mysqli_multi_query($connection,$query); 

Upto Bước này mọi thứ đều tốt. Nhưng khi tôi thực hiện truy vấn sau Nó cung cấp cho Lỗi

$select_query = "SELECT * FROM msgs WHERE msg_id = {$msg_id}"; 

$result_set = mysqli_query($connection,$select_query); 

if(!$result_set) { 
    die(mysqli_error($connection)); 
} 

Tại đây, nó cung cấp cho Lỗi Commands out of sync; you can't run this command now. Tôi không thể hiểu tình huống này

Lưu ý: Có bất kỳ vấn đề nào trong Truy vấn, tôi đã thực hiện cùng một truy vấn trực tiếp với PHPMyAdmin và nó hoạt động tốt.

Trả lời

13

Có kết quả bộ cấp phát từ các truy vấn:

mysqli_multi_query ($ connection, $ query);

Bạn cần phải sử dụng kết quả/cửa hàng trước khi bạn có thể tiến hành truy vấn tiếp theo sau: Vì bạn trông giống như bạn không thực sự quan tâm đến các tập kết quả đầu tiên, làm được điều này sau khi truy vấn đa ..

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

lựa chọn khác là để đóng kết nối và bắt đầu nó một lần nữa ..

mysqli_close($connection); 
$connection = mysqli_connect("localhost","username","password","tbl_msgs"); 

Tất cả phụ thuộc vào yêu cầu của bạn.

+2

tại sao tôi cần phải làm điều này với mysqli nhưng không phải mysql? – Fearghal

+0

các chức năng mysql_ * không còn được dùng kể từ phiên bản PHP 5.5.0. – LightYearsBehind

Các vấn đề liên quan