IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[SQL] Comment faire une procédure stockée


Sujet :

PHP & Base de données

  1. #1
    Membre habitué Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Points : 161
    Points
    161
    Par défaut [SQL] Comment faire une procédure stockée
    bonjour à tous

    je voudrais savoir comment appelée une procédure stockée en php.

    J'ai la table suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE `ma_table` (
    `id` INT( 11 ) NOT NULL AUTO_INCREMENT ,
    `nom` VARCHAR( 100 ) NOT NULL ,
    INDEX ( `id` ) 
    );
    et j'ai crée la procédure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE PROCEDURE ajout 
    (
    	IN nom 	VARCHAR(100)
    ) 
    BEGIN
    	INSERT INTO ma_table (nom) values (nom);
     
    END;
    si je l'appel dans phpmyadmin avec la commande suivante :
    j'ai bien un element qui est crée dans ma table.

    J'ai 2 questions :
    1 - comment appeler cette procédure depuis php ?
    2 - comment récupérer l'id générer automatiquement ?

    Merci de vos lumières.

    PoichOU

  2. #2
    Membre expérimenté
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 011
    Points : 1 375
    Points
    1 375
    Par défaut
    A mon avis il faut que tu appelles la procédure stockée comme s'il s'agissait d'une simple requête SQL, donc avec un mysql_query.

  3. #3
    Membre habitué Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Points : 161
    Points
    161
    Par défaut
    D'accord et comment puis je faire pour récupérer un résultat ?

  4. #4
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    As-tu essayé avec un classique mysql_insert_id() ?

  5. #5
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 039
    Points
    6 039
    Par défaut
    Citation Envoyé par PoichOU
    bonjour à tous

    je voudrais savoir comment appelée une procédure stockée en php.

    J'ai la table suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE `ma_table` (
    `id` INT( 11 ) NOT NULL AUTO_INCREMENT ,
    `nom` VARCHAR( 100 ) NOT NULL ,
    INDEX ( `id` ) 
    );
    et j'ai crée la procédure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE PROCEDURE ajout 
    (
    	IN nom 	VARCHAR(100)
    ) 
    BEGIN
    	INSERT INTO ma_table (nom) values (nom);
     
    END;
    si je l'appel dans phpmyadmin avec la commande suivante :
    j'ai bien un element qui est crée dans ma table.

    J'ai 2 questions :
    1 - comment appeler cette procédure depuis php ?
    2 - comment récupérer l'id générer automatiquement ?

    Merci de vos lumières.

    PoichOU
    Dans ta procédure tu fais un

    RETURN LAST_INSERT_ID()

    Pour appeler ta procédure c'est comme si tu executais une simple requete SQL.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  6. #6
    Membre habitué Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Points : 161
    Points
    161
    Par défaut
    Merci à vous de ces infos.

    J'ai modifié ma procédure comme tel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE PROCEDURE ajout 
    (
    	IN nom 	VARCHAR(100)
    ) 
    BEGIN
    	INSERT INTO ma_table (nom) values (nom);
    	RETURN LAST_INSERT_ID();
     
    END;
    Mais j'obtient l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RETURN is only allowed in a FUNCTION

  7. #7
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Une procédure ne peut pas retourner une valeur, il faut utiliser une fonction dans ce cas. La syntaxe reste cependant très proche : http://dev.mysql.com/doc/refman/5.0/...procedure.html

  8. #8
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 039
    Points
    6 039
    Par défaut
    Exacte, c'est juste ça la différence.
    Procédure c'est un boite qui fait sa magouille.
    Fonction c'est une boite qui fait sa magouille et te chie quelque chose
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  9. #9
    Membre habitué Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Points : 161
    Points
    161
    Par défaut
    merci de l'info

    le problème est que je n'arrive pas à faire de function.

    voici ma function (tirée du lien ci dessus) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE FUNCTION bonjour (s CHAR(20)) RETURNS CHAR(50)
    RETURN CONCAT('Bonjour, ',s,'!');
    et voici l'erreur que j'obtient :
    This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled
    quelqu'un a une idée ?

  10. #10
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 039
    Points
    6 039
    Par défaut
    Voici une qui permet de faire un équivalent d'un GUID même si mysql possède la même fonction mais se qu'elle renvois me plais pas.
    Tu as un condensé d'une syntaxe d'une fonction.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    CREATE FUNCTION `RefIO`()
        RETURNS char(36)
        DETERMINISTIC
        CONTAINS SQL
        SQL SECURITY DEFINER
        COMMENT ''
    BEGIN
         DECLARE hashe1 VARCHAR(8);
         DECLARE hashe2 CHAR(4);
         DECLARE hashe3 CHAR(4);
         DECLARE hashe4 CHAR(4);
         DECLARE hashe5 CHAR(12);
         DECLARE hasheRef CHAR(36);
     
         SET hashe1 = SUBSTRING(MD5(RAND()),25);
         SET hashe2 = SUBSTRING(MD5(RAND()),29);
         SET hashe3 = SUBSTRING(MD5(RAND()),29);
         SET hashe4 = SUBSTRING(MD5(RAND()),29);
         SET hashe5 = SUBSTRING(MD5(RAND()),21);
         SET hasheRef = CONCAT_WS('-', hashe1, hashe2, hashe3, hashe4, hashe5);
         IF (SELECT COUNT(*) FROM zorha_prd_refio WHERE idrefout = hasheRef) > 0 THEN
            RETURN RefIO();
         END IF;
         RETURN hasheRef;
    END;
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/03/2007, 17h00
  2. [AS400] Comment faire des procédures stockées ?
    Par marsup54 dans le forum DB2
    Réponses: 6
    Dernier message: 22/08/2005, 15h34
  3. SQL dynamique dans une procédure stockée
    Par Amnesiak dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/07/2005, 15h17
  4. Comment creer une procédure stockée à partir d'un code VBA?
    Par Alcor020980 dans le forum Connexion aux bases de données
    Réponses: 4
    Dernier message: 24/05/2005, 19h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo