Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/03/2011, 11h21   #1
Nouveau Membre du Club
 
François
Inscription : mars 2008
Messages : 59
Détails du profil
Informations personnelles :
Nom : François
Localisation : France, Ille et Vilaine (Bretagne)

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

Informations forums :
Inscription : mars 2008
Messages : 59
Points : 25
Points : 25
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 :
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
franquis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 11h29   #2
Membre régulier
 
Homme
Chef de projet NTIC
Inscription : juin 2007
Messages : 69
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 : 69
Points : 70
Points : 70
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.
Cobalt59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 11h31   #3
Nouveau Membre du Club
 
François
Inscription : mars 2008
Messages : 59
Détails du profil
Informations personnelles :
Nom : François
Localisation : France, Ille et Vilaine (Bretagne)

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

Informations forums :
Inscription : mars 2008
Messages : 59
Points : 25
Points : 25
Ok!

Merci pour ta réponse (et ta rapidité!).
franquis est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h48.


 
 
 
 
Partenaires

Hébergement Web