Passage de paramètre entre procédure stockée et script Php

Passage de paramètre entre procédure stockée et script Php - PHP - Programmation

Marsh Posté le 09-04-2014 à 15:24:19    

Bonjour
j'ai une procédure stockée sous mysql qui fonctionne bien
delimiter //
CREATE PROCEDURE ChainReaction
(
IN inputNo int ,
OUT cPath varchar(50)
)
BEGIN
declare final_id int default 1000000;
SET cPath=inputNo;
Set final_id=inputNo;
while (final_id !=0) do
Set inputNo=final_id;
SELECT parent_id into final_id from categories where categories_id=inputNo;
if (final_id !=0) then
SET cPath= concat(final_id , "_" , cPath) ;
end if;
end while;
END//
delimiter ;
 
sous mysql
je saisie
SET @P1=30110;
CALL Chainreaction(@P1,@P2);
SELECT @P1,@P2; ou SELECT @P2
et j'obtiens le résultat 30000_30100_30110
 
 
Comment appeler cette procédure stockée en Php procédural?  
J'ai essayé cela
$azerty="1233";
$categories_query = tep_db_query("CALL Chainreaction(30110,".$azerty." )" );
echo $azerty;
$categories = tep_db_fetch_array($categories_query);
print_r($categories);
 
mais je récupére un message d'erreur mysql 1414 - OUT or INOUT argument 2 for routine ... ce qui confirme que le passage de ma 2eme variable est mauvais.
 
Est-ce que le recours à une requete préparée est obligatoire? Et comment récupérer ma chaine de caractère?
Merci

Reply

Marsh Posté le 09-04-2014 à 15:24:19   

Reply

Marsh Posté le 09-04-2014 à 17:15:59    

Avoir ".$azerty." pour le paramètre qui est un OUT, ça me paraît bizarre :/
 
Je me serais plus attendu à un truc du genre &$VarToto.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 10-04-2014 à 16:53:27    

Slt,
ce que j'utilise
code php:

Code :
  1. $connect = db_connect(); // les infos de connexion sous mysql
  2. $azerty="1233";
  3. $query = sprintf("CALL ChainReaction ('%s', @cPath);", mysql_real_escape_string($azerty, $connect));


sprintf pour eviter l injection sql, donc $azerty va remplacer le %s, et le @cPath signifie dans quel variable je recupere le paremetre de retour de la procedure sotckee.
ensuite:

Code :
  1. $result = mysql_query($query,$connect); //on execute l'appel de la procedure stockée.
  2. $result = mysql_query('SELECT  @cPath as cPath', $connect); // on recupere la valeur retournée.
  3. $rec = mysql_fetch_array($result);
  4. echo $rec['cPath']; // on affiche le resultat.


si tu as besoin d'autre explication n'hesite pas


Message édité par deejay59 le 10-04-2014 à 16:58:43
Reply

Marsh Posté le 11-04-2014 à 09:41:17    

Merci Deejay59
Je ne voyais pas cela comme ça. Nickel!

Reply

Marsh Posté le 11-04-2014 à 14:01:42    

de rien  :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed