JeuWeb - Crée ton jeu par navigateur
Procédure stockée - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Procédure stockée (/showthread.php?tid=7814)

Pages : 1 2


Procédure stockée - MeTaLLiQuE - 28-05-2017

Hello,

J'aimerais en apprendre plus sur les procédures stockées, afin de pouvoir les implémanter sur mon jeu si le besoin s'en fait sentir.

Or, sur Internet, je ne trouve pas de tutoriel complet en mettant des cas pratiques concrets.

Connaissez-vous des liens vers des sites proposant des tutoriels complets et/ou du code source commentée (cas pratique?)

Merci Smile


RE: Procédure stockée - Xenos - 28-05-2017

Salut,

je peux te proposer le lien vers mon propre article sur mon architecture: https://toile.reinom.com/prawd/ et plus spécifiquement peut-être, la section sur https://toile.reinom.com/prawd/#La_logique_relationnelle

S'il y a besoin de plus de code, de schémas, ou s'il manque des infos, n'hésite pas à me le dire, que j'étoffe encore un peu toute cela.

Sinon, la doc mysql est aussi bien faite sur ce sujet https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html et leur FAQ clarifiera certains points https://dev.mysql.com/doc/refman/5.7/en/faqs-stored-procs.html

Voilà de quoi comprendre le fonctionnement des procédures (liens vers la doc) et un exemple d'utilisation en situation réelle (mon article) Smile


RE: Procédure stockée - MeTaLLiQuE - 28-05-2017

Re,

J'ai déjà lu tes articles (que j'aime bien au passage, je te l'ai déjà dit quelque part ^^), mais à mon goût, il manque de commentaire dans le code pour dire ce qu'il fait.

Pour la doc MySQL, je n'y suis pas allé et... je jèterai un oeil!

EDIT : Par exemple, que veut dire "c.id AS `characters:list;id:int`", dans les premières lignes ? Plus spécifiquement le characters:list

Merci Smile


RE: Procédure stockée - Xenos - 28-05-2017

Merci Smile

'pas faux, je vais le détailler vu que c'est un point un peu plus spécifique de mon archi (mon code PHP qui récupère les resultsets de la procédure se sert des noms des colonnes pour savoir le type de données qu'elles contiennent, et le nom de la première colonne sert à savoir s'il on attend 1 ou plusieurs lignes de données dans ce resultset)


RE: Procédure stockée - MeTaLLiQuE - 28-05-2017

Pas de soucis, merci pour le détail Wink


RE: Procédure stockée - Xenos - 28-05-2017

Voilà: https://toile.reinom.com/prawd-lien-php-mysql/ Smile

Là encore, s'il y a besoin d'éclaircir des points, n'hésite pas.


RE: Procédure stockée - MeTaLLiQuE - 28-05-2017

Merci Smile

C'est mieux :p


RE: Procédure stockée - Air - 12-07-2018

Hello,

Je ne sais pas si je dois ouvrir un nouveau topic ou pas car mon souci concerne spécifiquement l'utilisation (l'appel) de procédure stockée en php.
J'obtiens le message :
Error Number: 2014

Commands out of sync; you can't run this command now


En faisant des recherches sur google est mon ami, la plupart des réponses à propos de ce message d'erreurs disent qu'il faut vérifier l’utilisation du pilote mysqli dans le fichier de conf, ce qui est le cas.

J'utilise le framework codeigniter et
voici mon code :

Code PHP :
<?php 
// model param_model.php
           public function proc() {
               
               $result
= $this->db->query("CALL test()");
               var_dump($result);
           }

// controller appelant le model
 public function index() {
       
       $result
= $this->param_model->change_tour();
       if (!$this->param_model->proc()) {
                 echo "Echec lors de l'appel à la procédure stockée";
       }
 }

L'exécution de la procédure stockée dans phpmyadmin est correct, pas d'erreur.
Je la mets pour vous monter qu'elle est simple :

Code PHP :
<?php 
BEGIN

   SELECT id_peuple
,nom_peuple FROM peuple;

END

J'ai été faire un tour sur le site de Xénos car je sais que tu mets régulièrement en avant l'utilisation des procédures stockées :
https://toile.reinom.com/bien-utiliser-le-couple-php-mysql-en-evitant-les-boucles-de-requetes/

mais je vois que tu utilises PDO et la syntaxe diffère légèrement de mysqli .

Piste que je vais vérifier : faut-il forcément démarrer une transaction lorsqu'on fait appel à des procédures stockées ?

Sinon auriez-vous une idée de mon soucis ?

Merci par avance.

Air


RE: Procédure stockée - Xenos - 12-07-2018

Salut,
il n'est pas nécessaire de démarrer une transaction avant de lancer sa procédure stockée (celle-ci peut ne pas être démarrée du tout, même si ce n'est pas toujours conseillé pour des raisons de consistance, ou celle-ci peut être démarrée dans la procédure elle-même via START TRANSACTION).

A mon avis, le problème se situe plutôt dans l'usage du Framework: le framework doit, normalement, utiliser un client MySQL (mysqli ou PDO, mysqli étant moins intéressant car moins générique et n'offrant pas plus de fonctions que PDO) et une requête doit encore traîner dans ce client sans avoir été fermée lorsque tu fais ton appel à ta procédure stockée.

Ca, ou bien le framework n'est pas capable de gérer les retours des procédures.


En tous cas, je ne recommanderai pas trop les procédures mixées avec ce type de framework (sauf si la doc du framework a un chapitre dédié à l'utilisation des procédures dans ce framework). L'intérêt, en effet, de la procédure face aux requêtes, c'est de n'avoir qu'un seul appel au SQL, et de faire tout le calcul métier (tout le travail nécessaire à la page web) dans cette procédure (je me doute que l'exemple a été simplifié, mais si chaque procédure n'a qu'une seule query, meh, c'est pas utile de passer par les proc). Le framework perd alors très vite de son intérêt (il perd tout son intérêt de DAO, de facade vers le SQL, et de modèle en général). S'il faut vraiment le conserver, j'aurai alors tendance à ne pas utiliser les "DB accessor" (->db->) qu'il propose, et j'ouvrirai une connexion PDO sur la base de donnée moi-même (et éventuellement, je ne déclarerai rien de la BDD au niveau du framework pour qu'il ne s'y connecte pas lui-même).


RE: Procédure stockée - Air - 12-07-2018

Merci pour ton retour Xenos.

Oui je voulais commencer ma première utilisation de proc stockée par un exemple simple et qui fonctionne avant d'aller plus en profondeur dans cette solution.
L'usage des procédures stockées c'est pour effectuer le passage d'un tour de jeu . il y a plusieurs requêtes de mise à jour de données et donc je pense que le moyen le plus optimisé est la procédure stockée.

Je vais voir du côté des crons et sinon je me mettrais à la PDO :-)