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 :
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 :
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!