Stored procedure [Résolu]

Messages postés
247
Date d'inscription
dimanche 27 avril 2003
Statut
Membre
Dernière intervention
26 septembre 2008
- - Dernière réponse : gr43
Messages postés
95
Date d'inscription
mardi 20 mai 2008
Statut
Membre
Dernière intervention
8 septembre 2010
- 16 déc. 2008 à 20:40
Bonjour,

on m'a récemment parlé des stored procedure et convaincu d'en faire le plus possible pour économiser le traffic entre le client et le serveur. Je suis donc en train de transformer mes requêtes en stored procedure. Pour les requêtes qui ne renvoyent rien ou juste une valeur, pas de soucis, mais imaginons que je veux faire ceci :

SELECT id_joueur WHERE age > 15;

Cela renverra un tableau de données, comment puis-je renvoyer ca à ma page php ? Je ne veux pas passer par des astuces du type "concatener le résultat" ou autre car parfois il faut renvoyer plus de 20 champs...

Merci de vos réponses
Afficher la suite 

12 réponses

Meilleure réponse
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
29
3
Merci
hum...
oui tu peux faire un select, evidement... mais tu ne peux pas transformer :

SELECT id, nom FROM users WHERE age > 42;

qui renverait ce resultat :

id | nom
1 | Delphine
2 | Seb
3 | Alex

en procedure ou fonction stoquee...

SELECT mafonction();

qui renverait le meme resultat...


par contre, remplacer
SELECT nom FROM user WHERE id=3
nom
Alex

ca tu peux le remplacer par une procedure :

SELECT UserName(3) AS nom;
nom
Alex



Il y a deux choses genantes : le multicolones est impossible comme result, et le multiline aussi.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 213 internautes nous ont dit merci ce mois-ci

Commenter la réponse de coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
29
0
Merci
je doute que ca soit possible...

en fait, les procedures stoquees servent essentiellement a faire de l'abstraction. Le trafique n'est pas vraiment economise, mais par contre, tu gagnes en abstraction : d'un cote t'as ton schemat sql, de l'autre, ton php
Commenter la réponse de coucou747
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17
0
Merci
Hello,

ça l'est avec l'extension mysqli.
Commenter la réponse de malalam
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
29
0
Merci
malalam, si t'as un exemple de procedure stoquee qui renvoie ca... je suis prenneur
Commenter la réponse de coucou747
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17
0
Merci
Un exemple de ?
Commenter la réponse de malalam
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
29
0
Merci
un exemple de procedure stoquee qui renvoie le resultat d'un select de plusieurs lignes. un truc a base de CREATE FUNCTION ou CREATE PROCEDURE
Commenter la réponse de coucou747
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17
0
Merci
Ah non sur 1 select non : sur plusieurs select, ou sur un curseur. Je parlais de récupérer un résultat multiligne, moi. Ce n'est pas possible avec l'extension mysql il me semble, mais ça l'est avec mysqli.
Commenter la réponse de malalam
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
29
0
Merci
mais sans parler de php... en ne parlant que de mysql, je ne vois pas comment tu peux faire un resultat multilignes sans curseur ou select, (ah si, show...)

mais renvoyer un resultat multiligne a partir d'une procedure stoquee, j'ai toujours cru que c'etait impossible en fait...
Commenter la réponse de coucou747
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17
0
Merci
Tu peux très bien faire plusieurs select, ou foutre un curseur, dans une procédure stockée. C'est même souvent le cas à vrai dire. Je suis confronté à ce "problème" au taf mais sur mssql. C'est pourquoi j'ai implémenté dans ma classe d'abstraction DB une manière facile de récupérer plusieurs jeux de résultat, sans avoir rien à faire de plus que d'habitude. Toutes les procédures stockées que l'on a sur un de nos applicatifs renvoient plusieurs jeux de résultats (enfin, pas toutes...beaucoup...uniquement celles qui renvoient quelque chose, en plus, évidemment).
Commenter la réponse de malalam
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17
0
Merci
Après, je connais bien moins bien les rocédures stockées sur mysql, j'utilise bcp moins cette BDD à vrai dire.
Commenter la réponse de malalam
Messages postés
247
Date d'inscription
dimanche 27 avril 2003
Statut
Membre
Dernière intervention
26 septembre 2008
0
Merci
MMMmmmmmmmmmmh

Merci pour cette petite discussion instructive. L'explication de coucou747 parait interessante mais généralement, c'est du multi colonne justement, donc un peu ennuyant.

Bah, c'est pas non plus trop grave, je suis pas forcément obligé de tout passer en procédure stockée.

Merci pour vos réponses :p

Apprendre le VB6
Commenter la réponse de Ziman
Messages postés
95
Date d'inscription
mardi 20 mai 2008
Statut
Membre
Dernière intervention
8 septembre 2010
0
Merci
Salut,
Bon c'est sans doute un peu tard mais ça pourra peut être servir à
quelqu'un d'autre. En effet, c'est bien possible de récupérer un jeu
d'enregistrement à partir d'une procédure stockée en mysql, que ce soit
avec mysql ou mysqli qui sont des drivers multi_statement. Lorsqu'on execute une PS dans par mysql query
browser on obtient bien le résultat pour par exemple SELECT id_joueur WHERE age > 15; pour obtenir de même en php il faut bien rajouter en 5ème paramètre le flag multi_statement ce qui fait  mysql_connect ($serveur, $login, $mdp, true, 65536); et à voir pour mysqli mais c'est également possible.
Commenter la réponse de gr43