Maison  >  Article  >  base de données  >  Comment récupérer les variables de procédure stockée MySQL à l'aide de PDO en PHP ?

Comment récupérer les variables de procédure stockée MySQL à l'aide de PDO en PHP ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-09 03:20:02416parcourir

How do I retrieve MySQL stored procedure variables using PDO in PHP?

Récupérer les variables de procédure stockée MySQL à l'aide de PDO en PHP

Récupérer la valeur de LAST_INSERT_ID() à partir d'une procédure stockée MySQL peut être une tâche ardue . Malgré une abondante documentation en ligne, le processus s'avère souvent insaisissable pour de nombreux développeurs. Cet article vise à démystifier ce problème, en fournissant un guide étape par étape pour récupérer la valeur de la variable à l'aide de PHP PDO.

Paramètres de procédure PHP avec 'IN', 'INOUT' et 'OUT'. Paramètres

La clé pour récupérer la variable est de comprendre le processus en deux étapes impliqué. Tout d'abord, la procédure doit être exécutée avec les paramètres d'entrée nécessaires et les variables qui stockeront les résultats. Par la suite, une requête distincte est exécutée pour récupérer les valeurs des variables désignées.

Processus en deux étapes pour récupérer les procédures stockées MySQL à l'aide de PDO

Pour démontrer ce processus, Considérons le scénario suivant :

  • Procédure SQL avec les paramètres 'IN', 'INOUT' et 'OUT'
  • Code PHP pour exécuter la procédure et récupérer les valeurs des variables

Procédure SQL :

CREATE PROCEDURE `demoSpInOutSqlVars`(IN     pInput_Param  INT,
                                      INOUT  pInOut_Param  INT,
                                      OUT    pOut_Param    INT)
BEGIN
    /*
     * Pass the full names of SQL User Variable for these parameters. e.g. '@varInOutParam'
     * These 'SQL user variables names' are the variables that Mysql will use for:
     *    1) finding values
     *    2) storing results
     *
     * It is similar to 'variable variables' in PHP.  
     */
     SET pInOut_Param      := ABS(pInput_Param) + ABS(pInOut_Param); /* always positive sum  */
     SET pOut_Param        := ABS(pInput_Param) * -3;                /* always negative * 3  */ 
END

Code PHP :

// DB Connection
$db = appDIC('getDbConnection', 'default'); // get the default db connection
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

// Set PHP Variables
$phpInParam = 5;
$phpInOutParam = 404; // PHP InOut variable
$phpOutParam = null; // PHP Out variable

// Define and Prepare the SQL procedure call
$sql = "call demoSpInOut(:phpInParam,
                         @varInOutParam, /* mysql variable name will be read and updated */
                         @varOutParam)"; /* mysql variable name that will be written to  */

$stmt = $db->prepare($sql);

// Bind PHP Variables and Set SQL Variables
$stmt->bindParam(':phpInParam', $phpInParam, PDO::PARAM_INT);
$db->exec("SET @varInOutParam = $phpInOutParam"); // This is safe as it just sets the value into the MySql variable.

// Execute the procedure
$allOk = $stmt->execute();

// Get the SQL Variables into the PHP variables
$sql = "SELECT @varInOutParam AS phpInOutParam,
               @varOutParam AS phpOutParam
        FROM dual";
$results = current($db->query($sql)->fetchAll());

$phpInOutParam = $results['phpInOutParam'];
$phpOutParam = $results['phpOutParam'];

// Display the PHP variables
echo "phpInParam = " . $phpInParam . "\n";
echo "phpInOutParam = " . $phpInOutParam . "\n";
echo "phpOutParam = " . $phpOutParam . "\n";

Remarques supplémentaires :

  • La liaison des variables PHP (dans ce cas, $phpInParam) aux paramètres SQL IN est simple et effectuée via la méthode bindParam() de PDO.
  • Liaison des variables PHP à SQL INOUT et OUT ne sont pas pris en charge et entraîneront des erreurs d'exécution.
  • L'astuce pour récupérer les valeurs de la procédure SQL consiste à utiliser des variables utilisateur SQL pour conserver les résultats.
  • Exécuter PDO en mode « émuler la préparation » ' est recommandé pour le débogage et la détection des erreurs.

Conclusion :

La récupération des variables de procédure stockée MySQL dans PHP PDO est un processus à multiples facettes qui implique l'exécution de la procédure et récupérer les valeurs des variables utilisateur SQL. En suivant les étapes décrites ci-dessus, les développeurs peuvent accéder efficacement aux variables requises à partir des procédures stockées MySQL à l'aide de PDO.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn