Exécution Procédure Stockée en double
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:
$connexion = new db_comm() ;
le construct de ma classe:
Code:
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:
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:
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 :
Code:
$connexion->close() ;
qui est :
Code:
if ($this->idconn) @$this->idconn->close() ;
Ma proc PROC_affect_num_bon_visite est super simple !
Code:
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