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
le construct de ma classe:
Code : Sélectionner tout - Visualiser dans une fenêtre à part $connexion = new db_comm() ;
Cette classe contient une fonction d'exécution de requête SQL ( soit proc, soit requête simple).
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(); } }
Voici le code de cette fonction :
Le dernier while m'a permis de régler un problème de "pending result".
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 ; }
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 :
En fin de mon script php appelant la fonction RecupNumBon, j'appelle :
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) ; }
qui est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part $connexion->close() ;
Ma proc PROC_affect_num_bon_visite est super simple !
Code : Sélectionner tout - Visualiser dans une fenêtre à part if ($this->idconn) @$this->idconn->close() ;
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...
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
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
Partager