5

我正在使用一个平台(完美形式),该平台要求我对大多数查询使用存储过程,并且从未使用过存储过程,我无法弄清楚我做错了什么。以下语句执行没有错误:

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

我在 phpmyadmin 3.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 语句,这样我就可以调用它,并返回多个字段的多行。现在我只是想让任何选择工作。

任何帮助是极大的赞赏。

4

4 回答 4

9

弄清楚了。这不是 PHP 的错误(尽管它曾经是) - 它是 phpmyadmin 某些版本中的错误。相同的错误间歇性地重新出现,然后在各种颠覆中得到修复(见上文):

#1312 - PROCEDURE [name] can't return a result set in the given context

此行为似乎仅限于 phpmyadmin 内存储过程中的 SELECT 语句

使用像 MySQL Workbench 这样的客户端可以解决这个问题(或者你可以升级 phpmyadmin,但如果你像我一样在共享服务器上,那会很痛苦)。

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

于 2010-03-13T02:22:37.810 回答
1

检查您的 php 版本以查看这是否是已报告的错误(请参见此处)。

看到这篇文章: Can't return a result set in the given context

于 2010-03-02T01:54:07.977 回答
1

这可能集中在处理存储过程/例程中的 PHP 和 SELECT 的错误上。一种可能的解决方法是在存储过程中使用SELECT... INTO将结果归结为一个变量。这在我阅读的其他一些情况下有效。

   SELECT * FROM category INTO c;
于 2013-08-30T05:14:04.873 回答
0

当我执行以下操作时:

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 |
+-----+

我正在使用 PHP 5.3.1、MySQL 5.1.41 和 phpMyAdmin 3.2.4。

也许您只是拼错了您的程序名称?
还是您的 PHP 或 MySQL 安装有问题?(也许是一个错误。您是否尝试过更新到最新版本?)

于 2010-03-02T01:59:54.977 回答