MySQL error # 2014 - команды не синхронизированы;Вы не можете запустить эту команду сейчас - PullRequest
10 голосов
/ 17 января 2012

Я использую MySQL и определяю хранимую процедуру следующим образом:

delimiter ;;
Create procedure sp_test()

  select * from name_table;
end

Когда я пытаюсь выполнить эту процедуру, я получаю эту ошибку:

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

Что этозначит и что я делаю не так?

Ответы [ 10 ]

11 голосов
/ 17 января 2012

С Ручной

C.5.2.14.Команды не синхронизированы
Если вы получили Commands out of sync; you can't run this command now в своем клиентском коде, вы вызываете функции клиента в неправильном порядке.

Это может произойти, например, если вы используете mysql_use_result() и попробуйте выполнить новый запрос, прежде чем вы наберете mysql_free_result().Это также может произойти, если вы попытаетесь выполнить два запроса, которые возвращают данные, не вызывая между ними mysql_use_result() или mysql_store_result().

Это сообщение (взято из здесь )

Я решил эту проблему.Я использую MySQL-Fron вместо браузера MySQL Query.И все работает отлично.

заставляет меня думать, что это не проблема сервера или базы данных, а проблема в используемом вами инструменте.

6 голосов
/ 07 декабря 2013

Мне удалось воспроизвести эту ошибку с MySQL и phpmyadmin:

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

enter image description here На этой версии MySQL:

el@apollo:~$ mysql --version
mysql  Ver 14.14 Distrib 5.5.34, for debian-linux-gnu (x86_64) using readline 6.2

С помощью следующего SQL, запускаемого через окно запроса phpmyadmin:

use my_database;
DELIMITER $$

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

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

Я не мог получить ошибку через терминал mysql, поэтому я думаю, что это ошибка в phpmyadmin.

Отлично работает на терминале:

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)

Я думаю, что ошибка связана с изменением промежуточного запроса разделителей в phpmyadmin.

Обходной путь: Замедлите своего ковбоя и запускайте операторы SQL по одному при использовании phpmyadmin. phpmyadmin - это «одиночный боб», он может выполнять только одну работу.

0 голосов
/ 14 мая 2019

Я исправил эту проблему на phpMyAdmin 4.8.6

Проблема: https://github.com/phpmyadmin/phpmyadmin/issues/14614

Запрос на получение ответа: https://github.com/phpmyadmin/phpmyadmin/pull/15234

Патч: https://github.com/phpmyadmin/phpmyadmin/pull/15234/files#diff-de1b7e9dd5969db226563678c658ea67

Патч состоит из, и если mysqli_more_results , то вызов mysqli_next_result

0 голосов
/ 06 мая 2019

Возможная причина в том, что клиент mysql в вашем коде не является потокобезопасным, я столкнулся с той же ошибкой, когда я вызываю mysqldb в python, у меня есть один интерфейс mysql, используемый в 2 потоках, ошибка возникает. В этой ситуации вам необходимо создать больше интерфейсов mysql вместе с потоками.

0 голосов
/ 31 августа 2017

Это происходило со мной, потому что функция внутри процедуры возвращала значение, которое не было присвоено переменной.

Решение было:

select function .... INTO @XX;
0 голосов
/ 21 ноября 2016

Эта проблема возникает, очевидно, потому, что оба оператора выполняются одновременно. Единственный обходной путь, который я нашел, - это закрыть соединение после sp и выполнить другой оператор на новом. Читайте об этом здесь .

0 голосов
/ 09 июня 2015

Я только что получил ту же ошибку от phpMYadmin при вызове пользовательской функции, над которой я работаю.

Консоль mysql сообщает:

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

... что абсолютно правильно,в списке полей она была написана с ошибкой, поэтому оператор ссылался на неопределенную переменную.

Я должен был бы заключить, что

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

из phpMYadmin является довольно неспецифической ошибкой, чемво многих случаях, если не в большинстве, это просто затеняет реальную проблему, и не стоит тратить слишком много времени, пытаясь разобраться в ней.

0 голосов
/ 01 апреля 2015

Я также сталкивался с этой проблемой в C API.

Я нашел решение с последним примером выше, который говорит о разделителях.

use my_database;
DELIMITER $$

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

CALL foo()$$  

Мой код выполняет хранимую процедуру, а затем проверяет возврат. Я правильно использую mysql_free_result ().

Поскольку в процедуру не добавлено предложение select "into", возникла эта ошибка.

Последний пример выше в том же случае.

Я удалил выбор, и так как все в порядке.

Alex

0 голосов
/ 16 сентября 2012

Предположим, что когда вы создали хранимую процедуру, вы сохранили ее в базе данных с именем mydatabase, чтобы ВЫЗВАТЬ процедуру.Перейдите в свою локальную базу данных и:

CALL mydatabase.sp_test();

Где sp_test() - название вашей процедуры.

0 голосов
/ 17 января 2012

Вы забыли использовать ключевое слово 'Begin', и во время компиляции MySQL запутался, это должно работать:

DELIMITER ;;
Create procedure sp_test()
    BEGIN
       select * from name_table;
    END;;
DELIMITER ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...