Maison  >  Article  >  base de données  >  Comment récupérer des variables à partir de procédures stockées MySQL dans PHP PDO ?

Comment récupérer des variables à partir de procédures stockées MySQL dans PHP PDO ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-06 18:13:03186parcourir

How to Retrieve Variables from MySQL Stored Procedures in PHP PDO?

Récupération de variables à partir de procédures stockées MySQL dans PHP PDO

Cette discussion vise à fournir une solution complète pour récupérer des variables à partir de procédures stockées MySQL à l'aide de PHP PDO.

Problème

Lors de la tentative d'obtenir le LAST_INSERT_ID() à partir d'une procédure stockée MySQL dans PHP PDO, il a été constaté que le code implémenté ne fonctionnait pas.

Solution

Malheureusement, ce problème peut être attribué à un bug de longue date dans la gestion par PHP des procédures stockées MySQL avec les paramètres OUT.

Processus en plusieurs étapes

La solution de contournement implique un processus en deux étapes :

  1. Exécuter la procédure avec les variables d'entrée : Exécutez la procédure avec vos entrées et spécifiez les variables MySQL pour stocker le résultat.
  2. Variables de requête : Exécutez une requête distincte pour sélectionner les variables MySQL qui contiennent les résultats.

Appel de procédure avec des variables

Dans le code PHP fourni, remplacez la liaison problématique par ce qui suit :

$stmt = $db->prepare("CALL simpleProcedure(:name, @returnid)");

Cela lie la variable PHP $name au paramètre d'entrée et crée une variable MySQL nommée @returnid pour stocker la sortie. Le symbole @ indique que returnid est une variable MySQL.

Sélection des variables

Après l'exécution de la procédure, utilisez la requête suivante pour récupérer la variable @returnid :

$result = $db->query("SELECT @returnid AS result_id");
$row = $result->fetch();
$returnid = $row['result_id'];

Approche alternative avec les paramètres OUT

Si une solution plus complète est souhaitée, y compris l'utilisation des paramètres INOUT et OUT, l'exemple de code et les astuces suivants peuvent être utilisés :

Conseils :

  • Définissez ATTR_EMULATE_PREPARES du PDO sur true pour une meilleure gestion des erreurs.
  • Liez les variables PHP uniquement aux paramètres IN.

Exemple de code :

Procédure SQL :

CREATE PROCEDURE demoSpInOutSqlVars(IN pInput_Param INT, INOUT pInOut_Param INT, OUT pOut_Param INT)
BEGIN
    SET pInOut_Param = ABS(pInput_Param) + ABS(pInOut_Param);
    SET pOut_Param = ABS(pInput_Param) * -3;
END

Code PHP :

$phpInParam = 5;
$phpInOutParam = 404;
$phpOutParam = null;

$stmt = $db->prepare("CALL demoSpInOutSqlVars(:phpInParam, @varInOutParam, @varOutParam)");
$stmt->bindParam(':phpInParam', $phpInParam, PDO::PARAM_INT);
$db->exec("SET @varInOutParam = $phpInOutParam");
$stmt->execute();

$result = $db->query("SELECT @varInOutParam AS phpInOutParam, @varOutParam AS phpOutParam FROM dual");
$row = $result->fetch();

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

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