我使用的是一个平台(完美形式),它要求我在大多数查询中使用存储过程,而且我从未使用过存储过程,所以我不知道自己做错了什么。以下语句执行时没有错误:
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、PHPVersion5.2.12和mysql服务器版本5.0.89社区中执行这些语句。
当我编写一个返回参数的存储过程,然后选择它时,一切都很好(例如):
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语句封装在一个存储过程中,这样我就可以调用它,并返回多行多个字段。就目前而言,我只是想让任何有选择的工作。
任何帮助都是非常感谢的。
发布于 2010-03-13 02:22:37
弄明白了。这不是PHP的bug (尽管它曾经是)--它是phpmyadmin的某些版本中的一个bug。同一错误间歇性地再次出现,然后在不同的subversions中修复(见上文):
#1312 - PROCEDURE [name] can't return a result set in the given context此行为仅限于phpmyadmin中存储过程中的SELECT语句。
使用像MySQL工作台这样的客户端可以解决这个问题(或者您可以升级phpmyadmin,但是如果您像我一样在共享服务器上,这是很痛苦的)。
不管怎样,谢谢大家的帮助。
发布于 2010-03-02 01:54:07
检查您的php版本,看看这是否是报告的错误(请参阅这里)。
见本文:无法返回给定上下文中的结果集
发布于 2013-08-30 05:14:04
这可能是围绕一个处理PHP的错误和在存储过程/例程中进行选择。一个可能的工作是在存储过程中使用选择。转到将结果降为一个变量。这在我读到的一些其他案件中起了作用。
SELECT * FROM category INTO c;https://stackoverflow.com/questions/2360371
复制相似问题