Stored procedure [Résolu]

Signaler
Messages postés
245
Date d'inscription
dimanche 27 avril 2003
Statut
Membre
Dernière intervention
26 septembre 2008
-
gr43
Messages postés
95
Date d'inscription
mardi 20 mai 2008
Statut
Membre
Dernière intervention
8 septembre 2010
-
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

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
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.
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
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
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
18
Hello,

ça l'est avec l'extension mysqli.
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
malalam, si t'as un exemple de procedure stoquee qui renvoie ca... je suis prenneur
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
18
Un exemple de ?
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
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
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
18
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.
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
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...
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
18
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).
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
18
Après, je connais bien moins bien les rocédures stockées sur mysql, j'utilise bcp moins cette BDD à vrai dire.
Messages postés
245
Date d'inscription
dimanche 27 avril 2003
Statut
Membre
Dernière intervention
26 septembre 2008

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
Messages postés
95
Date d'inscription
mardi 20 mai 2008
Statut
Membre
Dernière intervention
8 septembre 2010

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.