Я использую платформу (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
Я выполняю эти операторы из phpmyadmin 3.2.4, Версия 5.2.12 PHP и 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 в хранимой процедуре, таким образом, я могу назвать его, и возвращать несколько строк нескольких полей. На данный момент я просто пытаюсь получить любую избранную работу.
Любая справка значительно ценится.
Разобрался. Это не ошибка PHP (хотя раньше было) - это ошибка некоторых версий phpmyadmin. Та же ошибка периодически появляется снова, а затем исправляется в различных подверсиях (см. Выше):
#1312 - PROCEDURE [name] can't return a result set in the given context
Такое поведение, по-видимому, ограничено операторами SELECT в хранимых процедурах внутри phpmyadmin .
Использование клиента, такого как MySQL Workbench, позволяет обойти проблему (или вы можете обновить phpmyadmin, но это неприятно, если вы работаете на общем сервере, как я).
В любом случае, спасибо всем за помощь.
Проверьте свою версию 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 |
+-----+
Я использую PHP 5.3.1, MySQL 5.1.41 с phpMyAdmin 3.2.4.
Возможно, вы просто неправильно написали имя своей процедуры?
Или может быть проблема с вашими установками PHP или MySQL? (Возможно, это ошибка. Вы пробовали обновиться до последних версий?)