Exécution procédure stockée en double

Résolu/Fermé
verocv Messages postés 41 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 25 janvier 2013 - 2 août 2010 à 11:36
verocv Messages postés 41 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 25 janvier 2013 - 2 août 2010 à 16:57
Bonjour,

J'ai une classe qui me gère ma connexion : db_comm. Je l'instancie au début de chacune de mes pages php

$connexion = new db_comm() ;


le construct de ma classe:

  
FUNCTION __construct()
{
    IF ( file_exists(mon fic) )
      include "../monfic";
    else 
      include "includes/monfic";
 
    $this->idconn = new mysqli($host, $user, $passwd, $dbname);
 
 
    /* Vérification de la connexion */
    IF (mysqli_connect_errno())
    {
			// printf("<p> Probleme lors de la connexion : %s\n</p>", mysqli_connect_error());
			echo "<p> Probleme lors de la connexion : ".mysqli_connect_error()."</p>";
      exit();
    }
}


Cette classe contient une fonction d'exécution de requête SQL ( soit proc, soit requête simple).

Voici le code de cette fonction :

  FUNCTION ExecDansTableau($TypeSQL, $SQLCde, $Params, &$Tableau)
  {
    IF ( $TypeSQL == "SELECT" ) $SQLComplet = $SQLCde ;
    else 
    {
      $SQLComplet = "CALL ".$SQLCde." (" ;
      IF (trim ($Params) <> "") $SQLComplet = $SQLComplet.$Params ;
      $SQLComplet = $SQLComplet.")" ;
    }
 
    IF (!$this->idconn) $this->connexion() ;
 
    IF ( !($ResultCde = $this->idconn->query($SQLComplet)))  
    {
      echo "y a un pb dans ExecDansTableau pour $SQLComplet, errno : ".$this->idconn->errno." txt : ".$this->idconn->error." <br/>";
      RETURN -1 ;
    }
        
    $nb_rows = 0 ;
    $nb_rows = $ResultCde->num_rows ;
 
    IF ($nb_rows > 0 )
      FOR($IndRow = 0 ; $IndRow < $nb_rows ; $IndRow++) $Tableau[$IndRow] = $ResultCde->fetch_array();
 
    $ResultCde->free();    
    while($this->idconn->next_result()) IF($ResultCde = $this->idconn->store_result()) $ResultCde->free();
 
    RETURN $nb_rows ;
}


Le dernier while m'a permis de régler un problème de "pending result".

J'appelle cette fonction depuis un de mes scripts php lors du submit de mon formulaire :
$bon_visite_imp->RecupNumBon($connexion);

$bon_visite_imp étant une instance d'une de mes classe et RecupNumBon une de ses fonctions :

 
FUNCTION RecupNumBon($connexion)
{
    $TypeSQL = "PROC" ;    
    $NomProc = "PROC_affect_num_bon_visite" ;
    $Params = "" ;
    $connexion->ExecDansTableau($TypeSQL, $NomProc, $Params, $this->tab_num) ;
}

En fin de mon script php appelant la fonction RecupNumBon, j'appelle :

$connexion->close() ;

qui est :
IF ($this->idconn) @$this->idconn->close() ;


Ma proc PROC_affect_num_bon_visite est super simple !

CREATE DEFINER='root'@'%' PROCEDURE 'PROC_affect_num_bon_visite'()
begin
 
	UPDATE num_bons_visite
	   SET id_der_bon_visite = id_der_bon_visite + 1 ;
		 
	SELECT id_der_bon_visite 
	  FROM num_bons_visite ;
 
end


Après mon appel de $bon_visite_imp->RecupNumBon($connexion) ma procédure stockée a été exécutée 2 fois et je ne vois vraiment pas pourquoi. Je ne l'appelle pas 2 fois. J'ai mis des alertes et ça ne passe bien qu'une fois...
Je pense donc avoir un souci avec ma façon de gérer ma connexion et mes appels aux fonctions mais je ne vois vraiment pas où....


J'espère avoir été assez claire...

Je suis vraiment dans une impasse...

Merci pour votre aide !

Véro


A voir également:

1 réponse

verocv Messages postés 41 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 25 janvier 2013 2
2 août 2010 à 16:57
désolée pour le dérangement, le submit se faisait 2 fois sur mon formulaire vu que c'était un input type="image" qui était utilisé et non "button" comme moi je l'avais au départ écrit....
1