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 :

Transaction: procédure SQL ou script PHP [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2008
    Messages : 59
    Par défaut Transaction: procédure SQL ou script PHP
    Bonjour à tous,

    J'ai besoin d'insérer un objet dans ma base de données qui repose sur plusieurs tables.

    J'ai donc créé une procédure 'create_nodeB' qui est composée comme ceci:

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    CREATE DEFINER=`cem`@`127.0.0.1` PROCEDURE `create_nodeB`(IN `nom_nodeB` VARCHAR(50), IN `type_nodeB` VARCHAR(50), IN `prestation_livraison` INT, IN `id_couple_NM` INT, IN `id_ORT` INT, IN `VLAN_ID_livraison_ORT` INT, IN `VLAN_ID_nodeB` INT, IN `nom_brasseur` VARCHAR(50), IN `port_working` INT, IN `port_protected` INT, IN `port_STM_working` INT, IN `port_STM_protected` INT, IN `aps_global` INT, IN `prestation_data` INT, IN `prestation_data_PVC` INT, IN `prestation_data_profil_ATM` INT, IN `prestation_voix` INT, IN `prestation_voix_PVC` INT, IN `prestation_voix_profil_ATM` INT)
    	LANGUAGE SQL
    	DETERMINISTIC
    	MODIFIES SQL DATA
    	SQL SECURITY DEFINER
    	COMMENT 'Création d\'un nodeB'
    BEGIN
     
    DECLARE id_ATM INT DEFAULT 0;
    DECLARE EXIT HANDLER FOR NOT FOUND ROLLBACK;
    DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
    DECLARE EXIT HANDLER FOR SQLWARNING ROLLBACK;
     
    START TRANSACTION;
     
    /** Création de la prestation Data **/
    INSERT INTO `prestations` (`numero_prestation`,`type`,`PVC`,`id_profil_ATM`)
    VALUES (prestation_data,'Data',prestation_data_PVC,prestation_data_profil_ATM);
     
    /** Création de la prestation Voix si elle existe	**/
    IF(prestation_voix IS NOT NULL) THEN
    	INSERT INTO `prestations` (`numero_prestation`,`type`,`PVC`,`id_profil_ATM`)
    	VALUES (prestation_voix,'Voix',prestation_voix_PVC,prestation_voix_profil_ATM);
    	END IF;
     
    /**	Création de l'objet ATM	**/
    INSERT INTO `atm` (`nom_brasseur`,`port_brasseur_working`,`port_brasseur_protected`,`port_STM_working`,`port_STM_protected`,`aps_global`)
    VALUES (nom_brasseur,port_working,port_protected,port_STM_working,port_STM_protected,aps_global);
    /**	On récupére l'id_ATM crée**/
    SET id_ATM = (SELECT LAST_INSERT_ID() FROM `atm`);
     
     
     
    /**	Création de l'objet NodeB	**/
    INSERT INTO `nodeb` (`nom_nodeB`,`type_nodeB`,`prestation_livraison`,`id_couple_NM`,`id_ORT`,`VLAN_ID_nodeB`,`VLAN_ID_livraison_ORT`,`id_ATM`)
    VALUES(nom_nodeb,type_nodeB,prestation_livraison,id_couple_NM,id_ORT,VLAN_ID_nodeB,VLAN_ID_livraison_ORT,id_ATM);
     
    COMMIT;
     
    END
    Mon problème est déjà que ma procédure fonctionne mal: je n'arrive pas à avoir de retour des erreurs éventuelles (je ne peux pas faire de RETURN car procédure, et une fonction n'autorise pas les COMMIT....)

    Je me demande donc s'il ne faut mieux pas réaliser ma fonction coté PHP (j'utilise PDO).

    Qu'en pensez-vous? Quel est la règle de l'art pour ce genre de procédure?
    Merci pour vos conseils

  2. #2
    Membre éclairé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juin 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2007
    Messages : 70
    Par défaut
    Salut franquis,

    Personnellement je trouve que les procédures sont faites pour des traitements asynchrones, automatiques et lourds. Si c'est juste pour faire des inserts, privilégies un traitement sql classique à partir de PHP.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2008
    Messages : 59
    Par défaut
    Ok!

    Merci pour ta réponse (et ta rapidité!).

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

Discussions similaires

  1. gestion des transactions mysql depuis un script php
    Par borough dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 29/04/2012, 14h28
  2. [MySQL] Requête sql dans un script php
    Par ceaser dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 25/05/2007, 14h01
  3. [SQL] Script PHP qui marche pas !
    Par Diabless6 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 12/02/2007, 16h28
  4. [SQL-Server] Erreur 500 lors d'un script php avec sql
    Par DeusDavid dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/12/2006, 18h47
  5. [SQL] Traitement de plusieurs requêtes .SQL dans un script PHP?
    Par M4x dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 19/03/2006, 19h59

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