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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
$connexion = new db_comm() ;
le construct de ma classe:
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
 
  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 :
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
 
  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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
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 :
qui est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
if ($this->idconn) @$this->idconn->close() ;
Ma proc PROC_affect_num_bon_visite est super simple !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
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