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

SQL Procédural MySQL Discussion :

PHP : Procédure stockée


Sujet :

SQL Procédural MySQL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 16
    Par défaut PHP : Procédure stockée
    Bonjour,

    J'ai un problème avec une procédure stockée sauvegardé sur phpMyAdmin que j'appelle avec PHP.

    Le but de cette procédure stockée est de vérifier que le titre n'a pas déjà été utilisé lors d'un nouvel enregistrement.

    Pour ce faire j'utilise la procédure stockée suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    create procedure verify_unique_title_procedure(titre_in text, num_in int, out titre_out text)
    BEGIN
    SELECT titre_livret INTO titre_out FROM guide WHERE titre_livret = titre_in AND id <> num_in;
    END
    Nous devons donc spécifier en valeurs d'entrées le titre que nous souhaitons et l'identifiant (qui sera égal à rien si nous insérons une ligne ou 0, j'ai essayé les deux). En valeur de sortie, nous avons le titre si ils étaient identiques, ou rien si ils sont différents.

    J'ai testé sous phpMyAdmin, la procédure stockée marche très bien.

    En utilisant ce code PHP :
    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
    public function callStoredProcedure($paramNum_in, $paramTitle_in)
    	{
    		echo $paramNum_in; //Affiche le numéro
    		echo $paramTitle_in; // Affiche un texte
     
    		$paramTitle_out = '';
    		$query = $this->bdd->prepare("CALL verify_unique_title_procedure(titre_in, num_in, titre_out)");
    		$query->bindParam('titre_in', $paramTitle_in, PDO::PARAM_STR, 50);
    		$query->bindParam('num_in', $paramNum_in, PDO::PARAM_INT);
    		$query->bindParam('titre_out', $paramTitle_out, PDO::PARAM_STR, 50);
    		$query->execute();
     
    		echo $paramTitle_out; // Egal à rien si les titres étaient différents mais le même que celui du paramètre d'entrée si les titres étaient identiques.
     
    		return $paramTitle_out;
    	}
    Les deux "echo" du début affiche bien les valeurs. Mais que je mette un titre déjà utilisé ou non, $paramTitle_out est égal à rien.

    Merci d'avance,
    Sylra.

  2. #2
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    salut,

    exécute ta requête comme ça déjà pour la tester avec des valeurs qui marchent car j'ai l'impression qu'elle renvoie rien... vu qu'il n'y a qu'elle dans ta procédure...

    une des conditions doit poser un problème...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 16
    Par défaut
    Citation Envoyé par ericd69 Voir le message
    salut,

    exécute ta requête comme ça déjà pour la tester avec des valeurs qui marchent car j'ai l'impression qu'elle renvoie rien... vu qu'il n'y a qu'elle dans ta procédure...

    une des conditions doit poser un problème...
    J'ai déjà essayé avec des valeurs définies... malheureusement ceci ne change rien.

    Est-ce que les lignes que j'ai utilisé dans mon code PHP sont correctes ?


    Il n'y aurait pas quelque chose à activer avec WAMP pour permettre l’exécution des procédures stockées ?

  4. #4
    Membre éprouvé Avatar de kain_tn
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 830
    Par défaut
    Bonjour,

    il me semble que ton problème se situe au niveau du binding avec PDO:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $query = $this->bdd->prepare("CALL verify_unique_title_procedure(titre_in, num_in, titre_out)");
    $query->bindParam('titre_in', $paramTitle_in, PDO::PARAM_STR, 50);
    $query->bindParam('num_in', $paramNum_in, PDO::PARAM_INT);
    $query->bindParam('titre_out', $paramTitle_out, PDO::PARAM_STR, 50);
    Il me semble que c'est plutôt comme ça qu'il faut écrire les paramètres nommés:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $query = $this->bdd->prepare("CALL verify_unique_title_procedure(:titre_in, :num_in, :titre_out)");
    $query->bindParam(':titre_in', $paramTitle_in, PDO::PARAM_STR, 50);
    $query->bindParam(':num_in', $paramNum_in, PDO::PARAM_INT);
    $query->bindParam(':titre_out', $paramTitle_out, PDO::PARAM_STR, 50);

  5. #5
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    tu dois activé les requêtes multiples car c'est pas activé de base:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);

    selon les versions de pdo cette valeur par défaut a changé... les procédures stockées permettant les requêtes multiple en 1 appel, tu dois activer la bufferisation des résultats (même si tu t'en sers pas vraiment)

Discussions similaires

  1. [SQL-Server] Exécution procédure stockée MSSQL depuis PHP
    Par Lejohnn dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 01/10/2008, 19h31
  2. [MySQL] Utilisation des procédures stockées PHP/MySQL
    Par flodotsoft dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 10/07/2008, 11h36
  3. [SQL-Server] Lancement via PHP d'une procédure stockée utilisant un DTS
    Par Fallen_Leaf dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 20/02/2008, 09h49
  4. Réponses: 2
    Dernier message: 01/10/2007, 08h38
  5. [PHP & MySQL 5] Procédures stockées...
    Par NeoMan dans le forum SQL Procédural
    Réponses: 8
    Dernier message: 13/01/2006, 12h11

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