MySQL Procédures Stockées ne fonctionne pas avec SELECT (question de base)
Je suis en utilisant une plate-forme (perfectforms) qui m'oblige à utiliser des procédures stockées pour la plupart de mes questions, et n'ayant jamais utilisé de procédures stockées, je ne peux pas comprendre ce que je fais mal. L'instruction suivante s'exécute sans erreur:
DELIMITER //
DROP PROCEDURE IF EXISTS test_db.test_proc//
CREATE PROCEDURE test_db.test_proc() SELECT 'foo'; //
DELIMITER ;
Mais quand j'essaie d'appeler à l'aide:
CALL test_proc();
J'obtiens l'erreur suivante:
#1312 - PROCEDURE test_db.test_proc can't return a result set in the given context
Je suis de l'exécution de ces instructions à partir de l'intérieur de phpmyadmin 3.2.4, la Version de PHP 5.2.12 et le serveur mysql version est 5.0.89-communauté.
Quand j'écris une procédure stockée qui renvoie un paramètre, puis sélectionnez-le, les choses fonctionnent bien (par exemple):
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 ;
fonctionne très bien, et quand je l'appelle:
CALL get_sum(@t); SELECT @t;
- Je obtenir la somme aucun problème.
En fin de compte, ce dont j'ai besoin pour faire est d'avoir une fantaisie instruction SELECT enveloppé dans une procédure stockée, donc je peux l'appeler, et retourner plusieurs lignes de champs multiples. Pour l'instant je suis juste essayer d'obtenir tout sélectionner de travail.
Toute aide est grandement appréciée.
- Quand vous dites
CALL myproc();
je suppose que vous voulez direCALL test_proc();
? - Oui désolé c'était un type-o. Est-il possible pour moi de le modifier?
- Oui, je pense que vous devriez être en mesure de modifier vos propres messages. (Doit être un lien modifier de quelque part.)
- J'ai corrigé le type-o.
Vous devez vous connecter pour publier un commentaire.
Pensé à elle. Ce n'est pas un bug de PHP (bien qu'il l'habitude d'être): c'est un bug dans certaines versions de phpmyadmin. Le même bug par intermittence réapparaît et est ensuite fixé dans divers détournements (voir ci-dessus):
Ce comportement semble se limiter à des instructions SELECT dans des procédures stockées à l'intérieur de phpmyadmin.
À l'aide d'un client MySQL Workbench contourne le problème (ou vous pouvez mettre à niveau phpmyadmin, mais c'est une douleur si vous êtes sur un serveur partagé, comme je le suis).
De toute façon, merci à tous pour votre aide.
Vérifier votre version de php pour voir si c'est un bug rapporté (voir ici).
Voir ce post:
Ne pouvez pas retourner un ensemble de résultats dans le contexte donné
C'est probablement ce qui est centrée autour d'un bug de traiter avec PHP et SÉLECTIONNER à l'intérieur d'une procédure stockée ou de routine. Un travail possible est d'utiliser la SELECT... INTO à l'intérieur de la procédure stockée pour ramener le résultat à une variable. Cela a fonctionné dans certains d'autres cas que j'ai lu.
Lorsque j'exécute les opérations suivantes:
Suivie par
Je me montre un résultat défini comme:
Je suis en utilisant PHP 5.3.1, MySQL 5.1.41 avec phpMyAdmin 3.2.4.
Peut-être vous avez juste mal orthographié votre nom de la procédure?
Ou pourrait-il y avoir un problème avec votre PHP ou MySQL installations? (Peut-être un bug. Avez-vous essayé de mettre à jour vers les dernières versions?)