MySQL错误2014-命令不同步;现在无法运行此命令
我使用的是MySQL,我定义的存储过程如下: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。命令不同
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年多以后,这仍然很有帮助!