MySQL存储过程不使用SELECT(基本问题)

MySQL存储过程不使用SELECT(基本问题),mysql,sql,stored-procedures,mysql-error-1312,Mysql,Sql,Stored Procedures,Mysql Error 1312,我使用的是一个平台perfectforms,它要求我在大多数查询中使用存储过程,而且我从未使用过存储过程,我无法找出我做错了什么。执行以下语句时不会出错: DELIMITER // DROP PROCEDURE IF EXISTS test_db.test_proc// CREATE PROCEDURE test_db.test_proc() SELECT 'foo'; // DELIMITER ; 但当我尝试使用以下方法调用它时: CALL test_proc(); 我得到以下错误: #1

我使用的是一个平台perfectforms,它要求我在大多数查询中使用存储过程,而且我从未使用过存储过程,我无法找出我做错了什么。执行以下语句时不会出错:

DELIMITER //
DROP PROCEDURE IF EXISTS test_db.test_proc//
CREATE PROCEDURE test_db.test_proc() SELECT 'foo'; //
DELIMITER ;
但当我尝试使用以下方法调用它时:

CALL test_proc();
我得到以下错误:

#1312 - PROCEDURE test_db.test_proc can't return a result set in the given context
我在phpMyAdmin3.2.4、PHP版本5.2.12和mysql服务器版本5.0.89-community中执行这些语句

当我编写一个返回参数的存储过程,然后选择它时,一切正常,例如:

DELIMITER //
DROP PROCEDURE IF EXISTS test_db.get_sum//
CREATE PROCEDURE test_db.get_sum(out total int)
BEGIN
SELECT SUM(field1) INTO total FROM test_db.test_table;
END //
DELIMITER ;
很好,当我称之为:

CALL get_sum(@t); SELECT @t;
我得到总数没问题

最终,我需要做的是在存储过程中封装一个奇特的SELECT语句,这样我就可以调用它,并返回多个字段的多行。现在,我只是想让任何选择的工作


非常感谢您的帮助。

检查您的php版本,看看这是否是报告的错误,请参阅

见此帖:

当我执行以下操作时:

DELIMITER //
DROP PROCEDURE IF EXISTS test_db.test_proc//
CREATE PROCEDURE test_db.test_proc() SELECT 'foo'; //
DELIMITER ;

CALL test_db.test_proc();
我向我显示一个结果集,如:

+-----+
| foo |
+-----+
| foo |
+-----+
我在phpMyAdmin3.2.4中使用PHP5.3.1、MySQL 5.1.41

也许你只是拼错了你的程序名?
或者您的PHP或MySQL安装可能有问题吗?也许是虫子。您是否尝试过更新到最新版本?

找到了答案。这不是PHP的一个bug,尽管它曾经是——它是phpmyadmin的一些版本中的一个bug。同一个bug间歇性地重新出现,然后在各种Subversion中修复,请参见上文:

#1312 - PROCEDURE [name] can't return a result set in the given context
此行为似乎仅限于phpmyadmin内存储过程中的SELECT语句

使用像MySQL Workbench这样的客户端可以解决这个问题,或者您可以升级phpmyadmin,但是如果您像我一样在共享服务器上,那将是一件痛苦的事情


无论如何,感谢大家的帮助。

这可能是围绕一个处理PHP的错误,并在存储过程/例程中进行选择。一种可能的解决方法是使用存储过程的内部将结果降到一个变量。这在我读到的一些文章中起了作用

   SELECT * FROM category INTO c;

当你说调用myproc;我想你是说呼叫测试程序;?是-对不起,那是o型。我有办法编辑吗?是的,我想你应该可以编辑你自己的帖子。应该是某个地方的编辑链接。我确实看到了那个帖子。我的PHP版本是PHPVersion5.2.12,据说是在那个bug出现之前。我在另一台本地服务器上测试了它。这一个运行的是PHP版本5.2.9、MySQL 5.1.33-community和phpmyadmin 3.1.3.1。根据bug报告,该配置应该没有问题。然而,仍然是相同的错误:1312-PROCEDURE test\u db.test\u proc无法返回给定上下文中的结果集也为我解决了问题-也就是说,我可以使用phpmyadmin复制错误,它不会出现在mysql CLI客户端,也不会出现在PHP应用程序本身。@tdammers-嘿,感谢验证。有时候,当所有聪明的程序员都告诉我我疯了,我开始认为我疯了。