2012-01-17 35 views
8

Tôi đang sử dụng MySQL và tôi xác định một thủ tục lưu trữ như thế này:Lỗi MySQL # 2014 - Lệnh không đồng bộ; bạn không thể chạy lệnh này ngay bây giờ

delimiter ;; 
Create procedure sp_test() 

    select * from name_table; 
end 

Khi tôi cố gắng để thực hiện thủ tục mà tôi nhận được lỗi này:

#2014 - Commands out of sync; you can't run this command now 

Điều này có nghĩa là gì và tôi đang làm gì sai?

Trả lời

9

Từ Manual

C.5.2.14. Commands out of sync
If you get Commands out of sync; you can't run this command now in your client code, you are calling client functions in the wrong order.

This can happen, for example, if you are using mysql_use_result() and try to execute a new query before you have called mysql_free_result() . It can also happen if you try to execute two queries that return data without calling mysql_use_result() or mysql_store_result() in between.

bài này (lấy từ here)

I've solved that problem. I use MySQL-Fron instead MySQL Query browser. And everything works fine.

làm cho tôi nghĩ rằng nó không phải là một máy chủ cơ sở dữ liệu hoặc vấn đề nhưng một vấn đề trong các công cụ mà bạn đang sử dụng.

0

Bạn quên sử dụng 'Bắt ​​đầu' từ khóa, và trong quá trình biên soạn MySQL là nhầm lẫn, điều này sẽ làm việc:

DELIMITER ;; 
Create procedure sp_test() 
    BEGIN 
     select * from name_table; 
    END;; 
DELIMITER ; 
1

Giả sử rằng khi bạn tạo ra các thủ tục lưu trữ bạn lưu trữ nó trong cơ sở dữ liệu tên mydatabase để gọi thủ tục. Chuyển đến DB máy chủ cục bộ của bạn và:

CALL mydatabase.sp_test(); 

Trong đó sp_test() là tên của quy trình của bạn.

+0

Tôi chỉ cố gắng vấn đề này và nó không làm việc trên máy chủ cơ sở dữ liệu Server: 127.0.0.1 qua giao thức TCP/IP kiểu Server: Phiên bản MariaDB Server: 10.1. 13-MariaDB - phân phối nhị phân mariadb.org Phiên bản giao thức: 10 Người dùng: root @ localhost Bộ ký tự máy chủ: UTF-8 Unicode (utf8) Máy chủ web Apache/2.4.17 (Win32) Mở SSL/1.0.2d PHP/5.6.20 Phiên bản ứng dụng khách cơ sở dữ liệu: libmysql - mysqlnd 5.0.11-dev - 20120503 - $ Id: 76b08b24596e12d4553bd41fc93cccd5bac2fe7a $ Mở rộng PHP: mysqli Tài liệu Phiên bản PHP: 5.6.20 –

4

tôi đã có thể tái sản xuất lỗi này với MySQL và phpMyAdmin:

#2014 - Commands out of sync; you can't run this command now 

enter image description here Mở phiên bản này của MySQL:

[email protected]:~$ mysql --version 
mysql Ver 14.14 Distrib 5.5.34, for debian-linux-gnu (x86_64) using readline 6.2 

Với sự chạy SQL sau qua cửa sổ truy vấn phpmyadmin:

use my_database; 
DELIMITER $$ 

CREATE PROCEDURE foo() 
BEGIN 
select 'derp' as 'msg'; 
END $$ 

CALL foo()$$   <----Error happens here, with or without delimiters. 

Tôi không thể gặp lỗi ha ppen thông qua các thiết bị đầu cuối mysql, vì vậy tôi nghĩ rằng đó là một lỗi với phpmyadmin.

Nó hoạt động tốt trên các thiết bị đầu cuối:

mysql> delimiter $$ 
mysql> use my_database$$ create procedure foo() begin select 'derp' as 'msg'; end $$ call foo() $$ 
Database changed 
Query OK, 0 rows affected (0.00 sec) 
+------+ 
| msg | 
+------+ 
| derp | 
+------+ 
1 row in set (0.00 sec) 
Query OK, 0 rows affected (0.00 sec) 

Tôi nghĩ rằng lỗi có cái gì để làm với việc thay đổi delimiters giữa truy vấn trong phpmyadmin.

Cách giải quyết: Làm chậm trình thu thập thông tin và chạy từng câu lệnh SQL của bạn khi sử dụng phpmyadmin. phpmyadmin là "bob tác vụ duy nhất", anh chỉ có thể làm một công việc.

0

Tôi cũng gặp sự cố này với API C.

Tôi đã tìm ra giải pháp với ví dụ cuối cùng ở trên, trong đó nói đến các dấu phân cách.

use my_database; 
DELIMITER $$ 

CREATE PROCEDURE foo() 
BEGIN 
select 'derp' as 'msg'; 
END $$ 

CALL foo()$$ 

Mã của tôi thực hiện quy trình đã lưu rồi kiểm tra lại. Tôi sử dụng chính xác mysql_free_result().

Kể từ khi tôi chưa thêm một điều khoản chọn "thành" trong thủ tục, xảy ra lỗi này.

Ví dụ cuối cùng ở trên là trong cùng một trường hợp.

Tôi đã xóa các lựa chọn và vì nó là ok.

Alex

0

Tôi vừa gặp lỗi tương tự từ phpMYadmin khi gọi chức năng người dùng mà tôi đang làm việc.

mysql console nói tuy nhiên:

ERROR 1054 (42S22): Unknown column 'latitude' in 'field list' 

... đó là hoàn toàn đúng, nó đã sai chính tả trong danh sách trường, do đó, một tuyên bố đã được tham khảo một biến không xác định.

tôi phải kết luận rằng

#2014 - Commands out of sync; you can't run this command now 

từ phpMyAdmin là một lỗi khá không rõ ràng, hơn trong nhiều trường hợp, nếu không muốn nói nhất, là chỉ che khuất những vấn đề thực sự, và người ta không nên dành quá nhiều thời gian cố gắng để làm cho tinh thần ra khỏi nó.

0

Bạn có vấn đề này rõ ràng là vì cả hai câu lệnh đang thực hiện cùng một lúc. Cách giải quyết duy nhất mà tôi đã tìm thấy là đóng kết nối sau sp và thực thi câu lệnh khác trên một lệnh mới. Đọc về nó here.

0

Đây là xảy ra với tôi vì một chức năng trong một thủ tục đã đưa ra một giá trị trở lại mà không được phân bổ cho một biến.

Giải pháp là:

select function .... INTO @XX; 
Các vấn đề liên quan