2012-01-17 21 views

risposta

9

Da 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.

Questo post (tratto da here)

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

mi fa pensare che non è un problema del server o un database, ma un problema nello strumento che si sta utilizzando.

0

Hai dimenticato di usare la parola 'Begin', e durante la compilazione di MySQL è confuso, questo dovrebbe funzionare:

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

Supponiamo che quando è stata creata la stored procedure è stato memorizzato nel database denominato mydatabase di chiamare il procedura. Vai al tuo localhost DB e:

CALL mydatabase.sp_test(); 

Dove sp_test() è il nome della procedura.

+0

Ho appena provato questo problema e non il suo lavoro sul server di database Server: 127.0.0.1 tramite TCP/IP Tipo di Server: la versione MariaDB Server: 10.1. 13-MariaDB - mariadb.org distribuzione binaria Protocol versione: 10 utente: root @ localhost Server charset: UTF-8 Unicode (utf8) del server Web Apache/2.4.17 (Win32) Aperto SSL/1.0.2d PHP/5.6.20 Versione client del database: libmysql - mysqlnd 5.0.11-dev - 20120503 - $ Id: 76b08b24596e12d4553bd41fc93cccd5bac2fe7a $ Estensione PHP: mysqli Documentazione Versione PHP: 5.6.20 –

4

sono stato in grado di riprodurre questo errore con MySQL e phpMyAdmin:

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

enter image description here Su questa versione di MySQL:

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

Con il seguente SQL eseguito attraverso la finestra di query phpmyadmin:

use my_database; 
DELIMITER $$ 

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

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

Non ho potuto ottenere l'errore di ppen attraverso il terminale mysql, quindi penso che sia un bug con phpmyadmin.

Funziona benissimo sul terminale:

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) 

penso che il bug ha qualcosa a che fare con il cambiamento del delimitatori metà query all'interno phpmyadmin.

Soluzione temporanea: Rallentare il proprio cowboy ed eseguire le istruzioni SQL una alla volta quando si utilizza phpmyadmin. phpmyadmin è "single task bob", può fare solo un lavoro.

0

Ho riscontrato questo problema anche con un'API C.

Ho trovato la soluzione con l'ultimo esempio sopra, che parla dei delimitatori.

use my_database; 
DELIMITER $$ 

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

CALL foo()$$ 

Il mio codice esegue una stored procedure quindi verifica la restituzione. Io uso correttamente mysql_free_result().

Poiché non ho aggiunto una clausola di selezione "in" nella procedura, si è verificato questo errore.

L'ultimo esempio sopra riportato si riferisce allo stesso caso.

Ho eliminato la selezione e poiché è ok.

Alex

0

Ho appena ricevuto lo stesso errore da phpMyAdmin quando si chiama una funzione su cui sto lavorando.

console mysql dice però:

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

... che è assolutamente corretto, è stato scritto male nell'elenco dei campi, quindi una dichiarazione è stata riferimento a una variabile non definita.

avrei dovuto concludere che

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

da PhpMyAdmin è un errore di piuttosto non specifico, che in molti casi, se non la maggior parte, è solo oscurando il vero problema, e non si dovrebbe spendere troppo molto tempo cercando di dare un senso a questo.

0

Si ha questo problema apparentemente perché entrambe le istruzioni sono in esecuzione contemporaneamente. L'unica soluzione che ho trovato è quella di chiudere la connessione dopo la sp ed eseguire l'altra istruzione su una nuova. Leggi su di esso here.

0

Questo mi accadeva perché una funzione all'interno di una procedura restituiva un valore non assegnato a una variabile.

La soluzione era:

select function .... INTO @XX; 
Problemi correlati