Stored procedure

Résolu
Ziman Messages postés 245 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 26 septembre 2008 - 22 avril 2008 à 22:36
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

12 réponses

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 42
23 avril 2008 à 19:54
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.
3
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 42
23 avril 2008 à 01:42
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
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
23 avril 2008 à 08:41
Hello,

ça l'est avec l'extension mysqli.
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 42
23 avril 2008 à 13:21
malalam, si t'as un exemple de procedure stoquee qui renvoie ca... je suis prenneur
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
23 avril 2008 à 13:27
Un exemple de ?
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 42
23 avril 2008 à 13:47
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
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
23 avril 2008 à 19:12
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.
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 42
23 avril 2008 à 19:28
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...
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
23 avril 2008 à 19:42
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).
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
23 avril 2008 à 19:42
Après, je connais bien moins bien les rocédures stockées sur mysql, j'utilise bcp moins cette BDD à vrai dire.
0
Ziman Messages postés 245 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 26 septembre 2008
24 avril 2008 à 09:52
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
0
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
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.
0