"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

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 ?

Publié le 2024-11-10
Parcourir:550

Why Does PDO Throw

Utilisation de 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 apparaître :

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é du PDO

Plonger dans les profondeurs du manuel du PDO et des discussions qui l'accompagnent révèle une anomalie dans les PDO préparés fonctionnalité de l'instruction. 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 implique de 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 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.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3