Si vous travaillez avec des procédures stockées MySQL, il est possible d'exécuter une procédure stockées dans Laravel comme suit :
Ex :
use DB;
...
DB::statement("call ma_procedure()");
Dans le cas où la procédure attend des paramètres en entrée, l'utilisation de DB::statement() permettra d'effectuer une requête préparée afin de mieux protéger contre les injections SQL.
Ex :
$parametre1 = ...
$parametre2 = ...
DB::statement("call ma_procedure(?, ?)", [
$parametre1,
$parametre2,
]);
Lorsqu'une procédure stockée a un paramètre en sortie, l'application aura probablement besoin de connaître la valeur de ce paramètre.
Pour y arriver, il faut se rappeler que le paramètre attendu est une variable de session MySQL (débutant par @) et non une variable PHP. Cette variable ne sera déclarée à nulle part dans le code PHP.
L'extrait de code suivant permettra d'y parvenir :
// exécuter la procédure stockée
DB::statement("CALL ma_procedure(@reussi)");
// retrouver la valeur du paramètre OUT
// $reponse est un array dont les éléments sont de type StdClass. $reponse[0] contient @reussi = 1
$reponse = DB::select('select @reussi');
$reussi = $reponse[0]->{'@reussi'};
Et lorsque la procédure attend des paramètres IN et des paramètres OUT, il est préférable de travailler avec DB::select() et DB::raw().
Ex :
$parametre1 = ...
$parametre2 = ...
// exécuter la procédure stockée
DB::statement("call ma_procedure(?, ?, @reussi)", [
$parametre1,
$parametre2,
]);
// retrouver la valeur du paramètre OUT
$reponse = DB::select('select @reussi');
$reussi = $reponse[0]->{'@reussi'};
▼Publicité