Formation PUB030 : Laravel, 2019 Les requêtes avec Eloquent ORM

18.7 Appeler une procédure stockée avec Laravel


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 :

Contrôleur Laravel (PHP)

use DB;

...

DB::statement("call ma_procedure()");

Procédure avec paramètres IN

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 :

Contrôleur Laravel (PHP)

$parametre1 = ...

$parametre2 = ...

 

DB::statement("call ma_procedure(?, ?)", [

    $parametre1, 

    $parametre2,

]);

Procédure avec paramètre OUT

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 :

Contrôleur Laravel (PHP)

// 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'};

Procédure avec paramètres IN et OUT

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 :

Contrôleur Laravel (PHP)

$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é

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre