Maison > Article > base de données > Pourquoi PDO lance-t-il « L'argument OUT ou INOUT… n'est pas une variable » lors de l'appel de procédures stockées avec des paramètres Out ?
Utiliser PDO pour appeler des procédures stockées avec des paramètres Out
L'appel de procédures stockées à l'aide de PDO peut être un processus transparent ; cependant, lorsque vous tentez d'utiliser des procédures stockées sans paramètres, une erreur énigmatique peut surgir :
SQLSTATE[42000]: Syntax error or access violation: 1414 OUT or INOUT argument 1 for routine mydb.proc_OUT is not a variable or NEW pseudo-variable in BEFORE trigger
La solution : une particularité PDO
Plonger dans les profondeurs de le manuel PDO et les discussions qui l'accompagnent révèlent une anomalie dans la fonctionnalité de déclaration préparée de PDO. Le nœud du problème réside dans la gestion des paramètres out au sein des procédures stockées.
Pour résoudre ce problème, une solution de contournement spécifique est nécessaire :
$stmt = $db->prepare("CALL SomeStoredProcedure(?, ?)"); $stmt->execute(array($someInParameter1, $someInParameter2));
Approche alternative
Une autre option consiste à modifier la procédure stockée pour inclure une instruction SELECT qui récupère le paramètre out après l'exécution de la procédure stockée :
CALL SomeStoredProcedure($someInParameter1, $someInParameter2, @someOutParameter); SELECT @someOutParameter;
Cette approche modifiée imite le comportement observé lors de l'appel direct de la procédure stockée. procédure dans MySQL.
En adoptant ces solutions de contournement, l'erreur énigmatique associée à l'appel de procédures stockées sans paramètres à l'aide de PDO se dissipe, permettant une exécution et une récupération transparentes des valeurs des paramètres hors.
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!