Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
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 28/05/2007, 00h03   #1
Membre habitué
 
Avatar de PoichOU
 
Homme PoichOU
Étudiant
Inscription : juillet 2006
Messages : 296
Détails du profil
Informations personnelles :
Nom : Homme PoichOU
Âge : 24
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Associations - ONG

Informations forums :
Inscription : juillet 2006
Messages : 296
Points : 114
Points : 114
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 :
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 :
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
PoichOU est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2007, 08h45   #2
Membre chevronné
 
Avatar de muad'dib
 
Inscription : janvier 2003
Messages : 881
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : janvier 2003
Messages : 881
Points : 780
Points : 780
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.
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans l'éditeur de message.
Pensez à la balise
Mon site dédié au jeu d'échecs - Logiciel de suivi d'entrainement de musculation gratuit
muad'dib est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2007, 10h49   #3
Membre habitué
 
Avatar de PoichOU
 
Homme PoichOU
Étudiant
Inscription : juillet 2006
Messages : 296
Détails du profil
Informations personnelles :
Nom : Homme PoichOU
Âge : 24
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Associations - ONG

Informations forums :
Inscription : juillet 2006
Messages : 296
Points : 114
Points : 114
D'accord et comment puis je faire pour récupérer un résultat ?
PoichOU est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2007, 14h03   #4
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Salut

As-tu essayé avec un classique mysql_insert_id() ?
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2007, 14h49   #5
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
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 :
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 :
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 !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2007, 15h45   #6
Membre habitué
 
Avatar de PoichOU
 
Homme PoichOU
Étudiant
Inscription : juillet 2006
Messages : 296
Détails du profil
Informations personnelles :
Nom : Homme PoichOU
Âge : 24
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Associations - ONG

Informations forums :
Inscription : juillet 2006
Messages : 296
Points : 114
Points : 114
Merci à vous de ces infos.

J'ai modifié ma procédure comme tel :
Code :
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 :
RETURN is only allowed in a FUNCTION
PoichOU est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2007, 15h49   #7
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
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
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2007, 16h02   #8
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
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 !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2007, 17h21   #9
Membre habitué
 
Avatar de PoichOU
 
Homme PoichOU
Étudiant
Inscription : juillet 2006
Messages : 296
Détails du profil
Informations personnelles :
Nom : Homme PoichOU
Âge : 24
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Associations - ONG

Informations forums :
Inscription : juillet 2006
Messages : 296
Points : 114
Points : 114
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 :
1
2
CREATE FUNCTION bonjour (s CHAR(20)) RETURNS CHAR(50)
RETURN CONCAT('Bonjour, ',s,'!');
et voici l'erreur que j'obtient :
Citation:
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 ?
PoichOU est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2007, 21h58   #10
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
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 :
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 !...
berceker united 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 19h41.


 
 
 
 
Partenaires

Hébergement Web