Ошибка 2014 mysql

I was able to reproduce this error with MySQL and phpmyadmin:

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

enter image description here
On this version of MySQL:

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

With the following SQL run through the phpmyadmin query window:

use my_database;
DELIMITER $$

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

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

I couldn’t get the error to happen through the MySQL terminal, so I think it’s a bug with phpmyadmin.

It works fine on the terminal:

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)

I think the bug has something to do with changing the delimiters mid-query within phpmyadmin.

Workaround: Slow down there, cowboy, and run your SQL statements one at a time when using phpmyadmin. phpmyadmin is «single task bob», he can only do one job.

Мой сервер запускает CentOS 6.4 с MySQL 5.1.69, установленным с помощью yum с репозиториями CentOS, и PHP 5.4.16, установленным с использованием yum с репозиториями ius. Edit3 Обновлено до версии MySQL Server: 5.5.31 Распространяется проектом сообщества IUS, и ошибка все еще существует. Затем изменили библиотеку на mysqlnd и, похоже, устранили ошибку. Тем не менее, с этим взад и вперед, нужно знать, почему эта ошибка иногда проявляется.

При использовании PDO и создании объекта PDO с использованием PDO::ATTR_EMULATE_PREPARES=>false иногда возникает следующая ошибка:

  • Отображение ссылок в PHP / MySQL?
  • Контейнер для инъекций зависимостей против шаблона реестра
  • Получить текст из следующего тега
  • Как проверить, сколько раз продукт был куплен клиентом
  • Имитировать конструкцию языка php-массива или проанализировать с помощью регулярного выражения?
  • preg_match координаты со знаком степени
 Table Name - zipcodes Error in query: SELECT id FROM cities WHERE name=? AND states_id=? SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute. File Name: /var/www/initial_install/build_database.php Line: 547 Time of Error: Tuesday July 2, 2013, 5:52:48 PDT 

Строка 547 – это последняя строка:

 $stmt_check_county->execute(array($data[5],$data[4])); if(!$county_id=$stmt_check_county->fetchColumn()) { $stmt_counties->execute(array($data[5])); $county_id=db::db()->lastInsertId(); } //$stmt_check_county->closeCursor(); //This will fix the error $stmt_check_city->execute(array($data[3],$data[4])); 

У меня была аналогичная проблема несколько лет назад, но она обновилась с PHP 5.1 до PHP 5.3 (и MySQL, вероятно, также был обновлен), и проблема волшебно исчезла, и теперь у меня это с PHP 5.5.

Почему это проявляется только тогда, когда PDO::ATTR_EMULATE_PREPARES=>false , и только с чередующейся версией PHP?

Я также обнаружил, что closeCursor() также исправит ошибку. Должно ли это всегда выполняться после каждого запроса SELECT где fetchAll() не используется? Обратите внимание, что ошибка все еще возникает, даже если запрос похож на SELECT COUNT(col2) который возвращает только одно значение.

Edit Кстати, так я создаю свое соединение. Я только недавно добавил MYSQL_ATTR_USE_BUFFERED_QUERY=>true , однако он не излечивает ошибку. Кроме того, можно использовать следующий сценарий, а также создать ошибку.

 function sql_error($e,$sql=NULL){return('<h1>Error in query:</h1><p>'.$sql.'</p><p>'.$e->getMessage().'</p><p>File Name: '.$e->getFile().' Line: '.$e->getLine().'</p>');} class db { private static $instance = NULL; private function __construct() {} //Make private private function __clone(){} //Make private public static function db() //Get instance of DB { if (!self::$instance) { //try{self::$instance = new PDO("mysql:host=localhost;dbname=myDB;charset=utf8",'myUsername','myPassword',array(PDO::ATTR_EMULATE_PREPARES=>false,PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC));} try{self::$instance = new PDO("mysql:host=localhost;dbname=myDB;charset=utf8",'myUsername','myPassword',array(PDO::ATTR_EMULATE_PREPARES=>false,PDO::MYSQL_ATTR_USE_BUFFERED_QUERY=>true,PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC));} //try{self::$instance = new PDO("mysql:host=localhost;dbname=myDB;charset=utf8",'myUsername','myPassword',array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC));} catch(PDOException $e){echo(sql_error($e));} } return self::$instance; } } $row=array( 'zipcodes_id'=>'55555', 'cities_id'=>123 ); $data=array($row,$row,$row,$row); $sql = 'CREATE TEMPORARY TABLE temp1(temp_id INT UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (temp_id) )'; db::db()->exec($sql); $sql='SELECT COUNT(*) AS valid FROM cities_has_zipcodes WHERE cities_id=? AND zipcodes_id=?'; $stmt1 = db::db()->prepare($sql); $sql ='SELECT temp_id FROM temp1'; $stmt2 = db::db()->prepare($sql); foreach($data AS $row) { try { $stmt1->execute(array($row['zipcodes_id'],$row['cities_id'])); $rs1 = $stmt1->fetch(PDO::FETCH_ASSOC); //$stmt1->closeCursor(); syslog(LOG_INFO,'$rs1: '.print_r($rs1,1).' '.rand()); $stmt2->execute(); $rs2 = $stmt2->fetch(PDO::FETCH_ASSOC); syslog(LOG_INFO,'$rs2: '.print_r($rs2,1).' '.rand()); } catch(PDOException $e){echo(sql_error($e));} } echo('done'); 

Solutions Collecting From Web of «Причины ошибки MySQL 2014 Не удается выполнить запросы, в то время как другие небуферизованные запросы активны»

  • как загрузить более одного изображения на сервер (база данных mysql), используя php и android
  • Как избежать сообщений, отправленных с PHP mail (), помеченных как спам?
  • MySQL получает случайное значение между двумя значениями
  • REST GET с игнорируемым параметром, PHP Symfony 3 Mpdf
  • удалить часть строки аргумента URL в php
  • Атрибуты поля объекта Symfony 2
  • mysql_insert_id альтернатива postgresql
  • Как создать запрос на просмотр календаря Outlook в PHP?

Клиентский протокол MySQL не позволяет выполнять более одного запроса. То есть вы выполнили запрос, и вы получили некоторые результаты, но не все, – тогда вы попытаетесь выполнить второй запрос. Если в первом запросе все еще есть строки для возврата, второй запрос получает ошибку.

Библиотеки клиентов обходятся вокруг этого, выбирая все строки первого запроса неявно при первой выборке, а затем последующие выборки просто перебирают результаты внутри кэширования. Это дает им возможность закрыть курсор (насколько это касается сервера MySQL). Это «буферизованный запрос». Это работает так же, как и с использованием fetchAll (), поскольку оба случая должны выделять достаточно памяти в PHP-клиенте для хранения полного набора результатов.

Разница в том, что буферизованный запрос содержит результат в клиентской библиотеке MySQL, поэтому PHP не может получить доступ к строкам, пока вы не выберете () каждую строку последовательно. В то время как fetchAll () сразу заполняет массив PHP для всех результатов, позволяя вам получить доступ к любой случайной строке.

Основная причина не использовать fetchAll () заключается в том, что результат может быть слишком большим, чтобы вписаться в ваш PHP memory_limit. Но, похоже, ваши результаты запроса имеют только одну строку, так что это не должно быть проблемой.

Вы можете закрытьCursor (), чтобы «отказаться» от результата, прежде чем вы извлекли последнюю строку. Сервер MySQL получает уведомление о том, что он может отменить этот результат на стороне сервера, а затем вы можете выполнить другой запрос. Вы не должны закрыватьCursor (), пока не закончите выбор заданного набора результатов.

Кроме того: я замечаю, что вы выполняете свой $ stmt2 снова и снова внутри цикла, но каждый раз он возвращает тот же результат. По принципу перемещения цикла-инвариантного кода из цикла вы должны выполнить это один раз перед запуском цикла и сохранить результат в переменной PHP. Поэтому, независимо от использования буферизованных запросов или fetchAll (), вам не нужно вставлять ваши запросы.

Поэтому я бы рекомендовал написать свой код таким образом:

 $sql ='SELECT temp_id FROM temp1'; $stmt2 = db::db()->prepare($sql); $stmt2->execute(); $rs2 = $stmt2->fetchAll(PDO::FETCH_ASSOC); $stmt2->closeCursor(); $sql='SELECT COUNT(*) AS valid FROM cities_has_zipcodes WHERE cities_id=:cities_id AND zipcodes_id=:zipcodes_id'; $stmt1 = db::db()->prepare($sql); foreach($data AS $row) { try { $stmt1->execute($row); $rs1 = $stmt1->fetchAll(PDO::FETCH_ASSOC); $stmt1->closeCursor(); syslog(LOG_INFO,'$rs1: '.print_r($rs1[0],1).' '.rand()); syslog(LOG_INFO,'$rs2: '.print_r($rs2[0],1).' '.rand()); } catch(PDOException $e){echo(sql_error($e));} } 

Примечание. Я также использовал именованные параметры вместо позиционных параметров, что упрощает передачу $ row в качестве массива значений параметров. Если ключи массива соответствуют именам параметров, вы можете просто передать массив. В старых версиях PHP вам нужно было включить префикс в ключи массива, но вам это больше не нужно.

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

Я надеюсь на лучший ответ, чем на следующий. Хотя некоторые из этих решений могут «исправить» проблему, они не отвечают на исходный вопрос о том, что вызывает эту ошибку.

  1. Установите PDO::ATTR_EMULATE_PREPARES=>true (я не хочу этого делать)
  2. Установите PDO::MYSQL_ATTR_USE_BUFFERED_QUERY (не работает для меня)
  3. Используйте PDOStatement::fetchAll() (не всегда желательно)
  4. Используйте $stmt->closeCursor() после каждого $stmt->fetch() (это в основном работало, однако у меня все еще было несколько случаев, когда это не так)
  5. Измените PHP-библиотеку MySQL с php-mysql на php-mysqlnd (возможно, что я буду делать, если не будет лучшего ответа)

У меня почти такая же проблема. Мой первый запрос после подключения к db возвращает пустой результат и отбрасывает эту ошибку. Включение буфера не помогает.

Мой код подключения:

 try { $DBH = new PDO("mysql:host=$hostname;dbname=$db_name", $username, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET utf8; SET NAMES utf8", PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_NUM)); } catch(PDOException $e) { echo $e->getMessage(); } 

Решение на моем пути состояло в том, чтобы удалить начальную команду:

 PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET utf8; SET NAMES utf8" 

Вот правильный код:

 try { $DBH = new PDO("mysql:host=$hostname;dbname=$db_name", $username, $password, array(PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_NUM)); } catch(PDOException $e) { echo $e->getMessage(); } 

И MYSQL_ATTR_USE_BUFFERED_QUERY не принуждается к true. Он установлен как значение по умолчанию.

У меня была та же проблема, я отправлял результаты в другую функцию mid loop. Быстрое исправление было, сохраните все результаты в массиве (например, Билл заявил, что если он слишком велик, у вас есть другие проблемы, о которых нужно беспокоиться), после сбора данных я запустил отдельный цикл для вызова функции по одному.

Кроме того, PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY не работал для меня.

I have a hierarchical MySQL table setup using the Nested Set model. I have created a stored proc which allows me to delete an organization.

When I try making consecutive calls to the stored proc, I get the following error referring to the second CALL command:

2014 — Commands out of sync; you can’t run this command now

Here is the SQL I am running:

SELECT @id := id, 
       @parent_id := parent_id 
  FROM organization 
 WHERE name = 'TESTDEAL';

CALL deleteOrg(@id);
CALL deleteOrg(@parent_id);

And here is my Stored Procedure:

DELIMITER $$

CREATE PROCEDURE deleteOrg(IN IN_ID INT)

MODIFIES SQL DATA

BEGIN 

    START TRANSACTION;

    SELECT @org_id := id, 
           @myLeft := lft, 
           @myRight := rgt,  
           @myWidth := rgt - lft + 1 
      FROM organization 
     WHERE id = IN_ID;

    # delete statements for removing roles and other dependencies

    DELETE FROM organization 
     WHERE id = @org_id;

    UPDATE organization 
       SET rgt = rgt - @myWidth 
     WHERE rgt > @myRight;

    UPDATE organization 
       SET lft = lft - @myWidth 
     WHERE lft > @myRight;

    COMMIT;

END;
$$

DELIMITER ;

Why would the second command be failing? Is MySQL trying to execute the second CALL command before the first one has been committed? Is there a way I can force the first one to fully execute before calling the second?

EDIT: organization table is using InnoDB

EDIT: Tried removing START TRANSACTION; and COMMIT; but am still getting same error

8 ответов

Из Руководство

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 браузер. И все работает нормально.

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

Marco
17 янв. 2012, в 07:54

Поделиться

Я смог воспроизвести эту ошибку с MySQL и phpmyadmin:

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

Изображение 123021
В этой версии MySQL:

[email protected]:~$ 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 — это «однопользовательский боб», он может выполнять только одно задание.

Eric Leschinski
07 дек. 2013, в 00:53

Поделиться

Предположим, что при создании хранимой процедуры вы сохранили ее в базе данных с именем mydatabase для вызова процедуры. Перейдите в локальную базу данных и:

CALL mydatabase.sp_test();

Где sp_test() — имя вашей процедуры.

chemicaluser
16 сен. 2012, в 01:12

Поделиться

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

Решение:

select function .... INTO @XX;

ethis
31 авг. 2017, в 21:52

Поделиться

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

Ayaskant Mishra
21 нояб. 2016, в 15:40

Поделиться

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

mysql console сообщает, однако:

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

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

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

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

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

tlum
09 июнь 2015, в 16:59

Поделиться

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

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

use my_database;
DELIMITER $$

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

CALL foo()$$  

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

Так как я не добавил в процедуру процедуры «в» процедуру, эта ошибка произошла.

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

Я удалил select и, так как это нормально.

Алекс

ALM
01 апр. 2015, в 17:13

Поделиться

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

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

redmoon7777
17 янв. 2012, в 08:09

Поделиться

Ещё вопросы

  • 0Предотвращение дублирования инициализации асинхронных служб в Angular.js
  • 0«Введите ошибку: слишком мало аргументов для функции App Http Controllers FrontController :: detail (), 0 передано и ожидается ровно 1»
  • 0Сделайте эту функцию jQuery динамической
  • 1Сравнение массивов для проверки последовательности
  • 1Как слушать один из его компонентов JButton?
  • 0Silex не будет загружать расширения Twig
  • 1Передача примитивного Типа в качестве параметра из XAML
  • 1Как исправить «java.io.IOException: чтение не удалось, сокет может быть закрыт или истекло время ожидания» при попытке подключения к сопряженному устройству?
  • 0Как я могу автоматически обновлять месяцы?
  • 0ОШИБКА: cout c ++ необъявленный
  • 0Codeigniter Pagination начинается с другой страницы и другой активной ссылки для разных сотрудников, в то время как код один и тот же
  • 1Возникает какая-то ошибка при использовании jplist JS
  • 0PHP, упорядочить массив различных объектов по полю
  • 0Путаница с машинно-зависимыми значениями указателей
  • 0отключить функцию PHP с другой функцией
  • 0Получить учетные данные базы данных из файла context.xml
  • 1Правильно ли использовать несколько условий OR в одном операторе if, каковы альтернативы?
  • 0Шаблон Joomla 3 — ширина модуля в обертке
  • 0Фильтровать и сортировать многомерный массив в PHP
  • 1расчет тепловой карты панд на море
  • 0Поиск данных в массиве, векторе, на карте и в списке
  • 0Как вертикально отцентрировать изображение помимо h1?
  • 0Как показать GridView во всплывающем окне jQuery с помощью GridView Paging?
  • 1URLDownloadToFile загрузка половины файла
  • 0вопрос кнопки возврата в Chrome
  • 1Создать проект только для сервлетов в NetBeans 8 без всего, что связано с Java EE?
  • 0Лучший способ отслеживать счетчик на уровне базы данных
  • 1Создать массив объекта, когда сканер читает текстовый файл
  • 0Побитовое «не» нуля равно нулю, когда ноль рассчитывается сдвигами
  • 0Анимация при наведении курсора с несколькими файлами изображений
  • 0Почему драйвер Mongo C ++ дает мне ошибки компиляции?
  • 0XML-данные в запрос вставки / обновления MySQL, используя PHP
  • 0Относительный путь 2 уровня вверх в JavaScript
  • 1Приложение отлично работает на эмуляторах, но вылетает на устройстве с: java.lang.UnsatisfiedLinkError: сбой dlopen: не удается найти символ «__aeabi_memcpy»
  • 0результат связывания двух сильных функциональных символов с одинаковой сигнатурой функции использует g ++ и почему?
  • 1возникли проблемы с методом быстрой сортировки
  • 0Как установить опцию csrf в symfony
  • 1удаление текста контура круговой диаграммы
  • 0Невозможно обновить значение индекса `$ scope` из клика DOM
  • 0MySQL регулярное выражение для сопоставления путей
  • 1Grails не собирает скомпилированные файлы Java .class
  • 1Google Cloud Messaging — не зарегистрирован на Android 9.0 Pie
  • 1Нижний список подсписков основан на длине наименьшего подсписка
  • 1Angular 2: проверка чисел с помощью Regex
  • 1NHibernate не ленивая загрузка
  • 0Не получайте ответа от Instagram API
  • 0Метод jQuery text ()
  • 1Динамическая последовательность точек GPS вдоль дороги
  • 1Чтение геометрии Postgres в байт [] с помощью спящего режима?
  • 0Angular SyntaxError: Неожиданный токен}

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

delimiter ;;
Create procedure sp_test()

  select * from name_table;
end

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

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

Что это значит и что я делаю неправильно?

4b9b3361

Ответ 1

Из Руководство

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 браузер. И все работает нормально.

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

Ответ 2

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

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

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

[email protected]:~$ 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 — это «одиночный боб», он может выполнять только одну работу.

Ответ 3

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

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

Ответ 4

Предположим, что при создании хранимой процедуры вы сохранили ее в базе данных с именем mydatabase для вызова процедуры. Перейдите в локальную базу данных и:

CALL mydatabase.sp_test();

Где sp_test() — имя вашей процедуры.

Ответ 5

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

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

use my_database;
DELIMITER $$

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

CALL foo()$$  

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

Так как я не добавил в процедуру процедуры «в» процедуру, эта ошибка произошла.

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

Я удалил select и, так как это нормально.

Алекс

Ответ 6

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

mysql console сообщает, однако:

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

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

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

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

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

Ответ 7

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

Ответ 8

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

Решение:

select function .... INTO @XX;

Ответ 9

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

Ответ 10

Я исправил эту проблему на 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

Понравилась статья? Поделить с друзьями:

Не пропустите эти материалы по теме:

  • Яндекс еда ошибка привязки карты
  • Ошибка 2006 itunes
  • Ошибка 201 ваз 2110
  • Ошибка 2014 2 мерседес
  • Ошибка 201 болид орион про

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии