Maison > base de données > tutoriel mysql > le corps du texte

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

Patricia Arquette
Libérer: 2024-11-06 18:13:03
original
271 Les gens l'ont consulté

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)");
Copier après la connexion

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'];
Copier après la connexion

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
Copier après la connexion

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'];
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal