Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL错误2014-命令不同步;现在无法运行此命令_Mysql_Stored Procedures - Fatal编程技术网

MySQL错误2014-命令不同步;现在无法运行此命令

MySQL错误2014-命令不同步;现在无法运行此命令,mysql,stored-procedures,Mysql,Stored Procedures,我使用的是MySQL,我定义的存储过程如下: delimiter ;; Create procedure sp_test() select * from name_table; end DROP PROCEDURE IF EXISTS processcolumns // 当我尝试执行该过程时,出现以下错误: #2014 - Commands out of sync; you can't run this command now 这意味着什么?我做错了什么 C.5.2.14。命令不同

我使用的是MySQL,我定义的存储过程如下:

delimiter ;;
Create procedure sp_test()

  select * from name_table;
end
DROP PROCEDURE IF EXISTS processcolumns //
当我尝试执行该过程时,出现以下错误:

#2014 - Commands out of sync; you can't run this command now 
这意味着什么?我做错了什么

C.5.2.14。命令不同步 如果命令不同步;你 现在无法在客户端代码中运行此命令,您正在调用客户端 功能顺序错误

例如,如果您使用mysql\u use\u result和 在调用mysql\u free\u result之前,尝试执行一个新查询。 如果您尝试执行两个返回数据的查询,也可能发生这种情况 不调用mysql\u use\u result或mysql\u store\u result

这篇文章摘自

我已经解决了那个问题。我使用MySQL Fron代替MySQL查询 浏览器一切正常


让我觉得这不是服务器或数据库问题,而是您使用的工具中的问题。

您忘记使用“Begin”关键字,并且在编译MySQL时感到困惑,这应该可以工作:

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

假设在创建存储过程时,将其存储在名为mydatabase的数据库中以调用该过程。转到本地主机数据库并执行以下操作:

CALL mydatabase.sp_test();

其中sp_test是您的过程的名称。

我能够用MySQL和phpmyadmin重现此错误:

#2014 - Commands out of sync; you can't run this command now
在此版本的MySQL上:

el@apollo:~$ mysql --version
mysql  Ver 14.14 Distrib 5.5.34, for debian-linux-gnu (x86_64) using readline 6.2
通过phpmyadmin查询窗口运行以下SQL:

use my_database;
DELIMITER $$

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

CALL foo()$$           <----Error happens here, with or without delimiters.
我认为这个bug与在phpmyadmin中更改中间查询分隔符有关


解决方法:放慢速度,牛仔,在使用phpmyadmin时一次运行一条SQL语句。phpmyadmin是单任务bob,他只能做一项工作。

我在C API中也遇到了这个问题

我用上面最后一个例子找到了解决方案,它谈到了分隔符

use my_database;
DELIMITER $$

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

CALL foo()$$  
我的代码执行一个存储过程,然后测试返回。 我正确地使用了mysql\u free\u结果

由于我没有在过程中添加select子句,因此发生了此错误

上面的最后一个例子也是同样的情况

我已经删除了选择和,因为它是确定的


Alex

在调用我正在使用的用户函数时,我刚刚从phpMYadmin得到了相同的错误

mysql控制台则表示:

ERROR 1054 (42S22): Unknown column 'latitude' in 'field list'
…这是绝对正确的,它在字段列表中拼写错误,因此语句引用了未定义的变量

我得得出结论

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

从phpMYadmin来看,这是一个相当非特定的错误,而在许多情况下,如果不是大多数的话,这只是掩盖了真正的问题,不应该花太多时间试图从中找出原因。

显然,您有这个问题,因为这两条语句同时执行。我找到的唯一解决方法是在sp之后关闭连接,并在新的连接上执行另一条语句。阅读相关内容。

这发生在我身上,因为过程中的函数返回了一个未分配给变量的值

解决办法是:

select function .... INTO @XX;

可能的原因是您代码中的mysql客户端不是线程安全的,我在python中调用mysqldb时遇到了相同的错误,我有一个mysql接口,在2个线程中使用,发生了错误。在这种情况下,您需要创建更多的mysql接口和线程。

我在phpMyAdmin 4.8.6上解决了这个问题

问题:

拉取请求:

修补程序:

修补程序分为和(如果有)
然后打电话给

这个问题似乎有多个来源。在我的案例中,所有发布的答案都不起作用,我发现在我的案例中,我对存储过程中的一个表进行了选择和更新,同一个表有一个被触发的更新触发器,并将该过程发送到一个无限循环中。一旦发现错误,错误就消失了


在我有一个select调用一个修改表的函数的情况下,我也复制了这个问题。这些类型的递归调用可能会产生问题,这是有道理的。通过更新tmp表,并在最后从tmp表更新原始表,这些问题得以解决。

在我的例子中,我的存储过程中有以下结构:

DELIMITER //
    DROP PROCEDURE IF EXISTS processcolumns;
    CREATE PROCEDURE processcolumns ()
    BEGIN
        (...)
    END //
DELIMITER ;

CALL processcolumns ();
DROP PROCEDURE processcolumns;
问题在于:如果存在processcolumns,则删除过程; 我去掉了分号;并将其替换为分隔符//如下所示:

delimiter ;;
Create procedure sp_test()

  select * from name_table;
end
DROP PROCEDURE IF EXISTS processcolumns //

现在问题解决了

由于在Python中重新使用db连接的代码更改,我刚才出现了这个错误。还原代码以为每个SQL查询建立DB连接解决了问题。

我刚刚尝试了此问题,但它在数据库服务器127.0.0.1上无法通过TCP/IP服务器工作。服务器类型:MariaDB服务器版本:10.1.13-MariaDB-MariaDB.org二进制分发协议版本:10用户:root@localhost服务器字符集:UTF-8 Unicode utf8Web服务器Apache/2.4.17 Win32 OpenSSL/1.0.2d PHP/5.6.20数据库客户端版本:libmysql-mysqlnd 5.0.11-dev-20120503-$Id:76b08b24596e12d4553bd41fc
delimiter ;;
Create procedure sp_test()

  select * from name_table;
end ## no end here, must add ;; after end. should be 
delimiter ;;
Create procedure sp_test()

  select * from name_table;
end ;;

93cccd5bac2fe7a$PHP扩展名:mysqli Documentation PHP version:5.6.20这对我来说非常适合,只需要在DROP命令的末尾添加新的分隔符。感谢您提供的简单解决方案,尽管我不知道它是如何解决这个问题的。9年多以后,这仍然很有帮助!