Bonjour,
Cela fait maintenant plusieurs semaines que j'essai de récupréer le résultat d'une procédure stocké sur mon sql Server.
Le code de mon controller pour appeler la procédure stocké est le suivant:
$this->loadModel('DevCondition');
$result = $this->DevCondition->query("Exec [dbo].[cond_docu_log_errors];");
debug($result);
Le debug affiche toujours "Array()". Pourtant ma procédure stocké renvoi 1ou 0 normalement.
Quelqu'un aurait une idée ?
Merci d'avance
The-Devil
Bonjour,
J'ai donc trouvé la solution après avoir éssayer différentes syntaxe random.
pour exécuter une procédure stocké, il suffit d'inscrire son nom dans query() comme ceci:
$this->loadModel('DevCondition');
$result = $this->DevCondition->query("[dbo].[cond_docu_log_errors]");
debug($result);
En espérant que cela dépanne quelqu'un ^^
Bonjour The-Devil,
de manière générale en PDO et Sql server
voici ce qui fonctionne
$stmt = $pdo->query("maProcedure");
ou encore
$query = $pdo->query("exec maProcedure");
et si on passe des paramètres
$query = $pdo->query("maProcedure 1234");
parfois il faut rajouter le schema dbo (en fonction du user utilisé et des droits)
$query = $pdo->query("exec dbo.maProcedure");
les crochets ne sont utiles que si les noms contiennent des espaces
Merci pour ces clarifications @Huggy !
Cela ne sera plus utilie que de faire une solution que j'ai éssayé en random haha
Je valide ta réponse et te souhaite une bonne journée :)
@Huggy
J'ai une procédure qui doit renvoyé une chaîne de caractères, si j'effectue le code suivant:
$result = $this->DevCondition->query("[dbo].[cond_docu_log_errors]");
debug($result);
le debug affiche true et non pas la valeur de retour.
Saurais-tu comment faire pour afficher la valeur de retour ?
Merci encore
comment retournes-tu ta chaine de caractères ?
si tu fais
SELECT 'coucou' AS result
dans ta PS
il suffit de lire le champ result
Je fais ceci afin de renvoyer un résultat :
if @check_cond = 0 begin select @result = 'False' print @result end
if @check_cond > 0 begin select @result = 'True' print @result end
et je'exécute la requête comme ceci:
$result = $this->DevCondition->query("exec test_proc;");
debug($result);
Et cela me donne Array();
Comment lire ce "Array()" ?
fait un SELECT plutot qu'un print
comme je l'ai dit plus haut.
Pour info, les paramètres OUTPUT ne sont pas compatible avec Php PDO car PDO ne connait que les parametres INPUT:OUTPUT mais pas OUTPUT seul.
Je ne comprends pas. Je ne peux pas simplement mettre 0 paramètres et récupérer la réponse de ma procédure ?
Si si
voici une PS
ALTER PROCEDURE [dbo].[pstest]
AS
BEGIN
select 'coucou' AS result;
END
et en php tu fais
try {
$pdo = new PDO("sqlsrv:Server=localhost;Database=mabase", "sa", "secret");
}
catch(PDOException $e) {
$msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
die($msg);
}
$stmt = $pdo->query("pstest");
while ($row = $stmt->fetch()) {
echo $row['result'];
}
ici le while ne sert pas puisqu'il n'y a qu'un seul résultat
J'essai de faire cela mais avec cakephp...
Saurais-tu réecrire cela avec la syntaxe de CakePHP ?