Commandes pour executer une procédure sql à partir de php

Commandes pour executer une procédure sql à partir de php - PHP - Programmation

Marsh Posté le 08-06-2004 à 09:51:27    

Comment executer une procédure sql à partir de php ?
 
Merci :jap:

Reply

Marsh Posté le 08-06-2004 à 09:51:27   

Reply

Marsh Posté le 08-06-2004 à 09:52:01    

en lisant la doc 30 sec?

Reply

Marsh Posté le 08-06-2004 à 10:02:16    

C'est pas en posant plusieurs fois la question que tu trouveras plus vite la réponse...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 08-06-2004 à 10:30:13    

Mara's dad a écrit :

C'est pas en posant plusieurs fois la question que tu trouveras plus vite la réponse...


 
Je sais bien! Mais j'ai la poisse ce matin, pour retrouver ce topic j'ai dû faire une recherche de mon pseudo !!! (pourtant je connais bien ce forum!!!)  [:bap2703]  
 
C'est sous Oracle.
 
PS: Je viens de virer le topic en double.


Message édité par voleurdecarottes le 08-06-2004 à 10:31:43
Reply

Marsh Posté le 08-06-2004 à 10:54:01    

Ok, bon, c'est pas super simple, mais en gros voilà un exemple avec OCI8 :

Code :
  1. <?php
  2. $query="BEGIN
  3. demo.ma_proc( 10, 'xxx', :PARAM1, :PARAM2 );
  4. END;"
  5. // Création d'un Statement sur la requête
  6. $stmt = OCIParse($conn, $query);
  7. // Bind des paramètres
  8. OCIBindByName( $stmt, ":PARAM1", &$p1, 50 );
  9. OCIBindByName( $stmt, ":PARAM2", &$p2, 50 );
  10. // Execution de la requête.
  11. $exec_result = OCIExecute( $stmt, OCI_DEFAULT );
  12. // Affichage du résultat
  13. echo "p1 = $p1<br>";
  14. echo "p1 = $p2<br>";
  15. ?>


Voir http://fr2.php.net/manual/fr/funct [...] byname.php


Message édité par Mara's dad le 08-06-2004 à 10:54:37

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 08-06-2004 à 11:10:45    

gizmo a écrit :

en lisant la doc 30 sec?


C'est vrai en général, mais là je me souvient avoir galèré tellement la dessus, qu'un bon exemple m'aurrais fait gagner un temps fou en compréhension.
L'API Oracle, je me demande si y'a pire :D ( remarque : je connais pas les MFCs ...)
Et encore, via PHP, c'est assez simple, en C un bind, ça donne :
 
"odefin(&cda, 2, (ub1 *) field_name, (sword) LONG_CHAMP, (sword) SQLT_STR, (sword) -1, (sb2 *) 0, (text *) 0, -1, -1, (ub2 *) 0, (ub2 *) 0)"
 
Sinon, j'ai un autre exemple d'appel de procédure stockée:

Code :
  1. <HTML>
  2. <?php
  3. $time_start = getmicrotime();
  4. $conn = ociLogon("user", "pass", "aliasbd" );
  5. $query="DECLARE
  6. qctx DBMS_XMLquery.ctxType;
  7. BEGIN
  8. qctx := DBMS_XMLquery.newContext('select * from refcontrole');
  9. :result := DBMS_XMLquery.getXML(qctx);
  10. DBMS_XMLquery.closeContext(qctx);
  11. EXCEPTION when others then
  12.  :ERROR := 1;
  13.  :SQLCODE := SQLCODE;
  14.  :SQLERRM := SUBSTR(SQLERRM,0,300);
  15. END;";
  16. $stmt = OCIParse($conn, $query);
  17. /* Output parameters */
  18.              
  19. OCIBindByName($stmt,":ERROR",&$insert_error,32);
  20. OCIBindByName($stmt,":SQLCODE",&$SQLCODE,32);
  21. OCIBindByName($stmt,":SQLERRM",&$SQLERRM,300);
  22. $result = OCINewDescriptor($conn, OCI_D_LOB);
  23. OCIBindByName($stmt,":result",&$result,-1,OCI_B_CLOB);
  24. $exec_result = OCIExecute($stmt,OCI_DEFAULT);
  25. $x = $result->Load();
  26. echo( "$x" );
  27. echo( "<HR>xxxxxxxxxxx" . $result->writetofile("refcontrole.txt" ) . "xxxxxx<br>\n" );
  28. ociLogOff($conn);
  29. $time = getmicrotime() - $time_start;
  30. printf("<HR><center>Page générée en %0.2f s</center>",$time);
  31. echo( "<HR>" );
  32. echo( get_class($result) );
  33. echo( "<HR>METHOD:<BR>\n" );
  34. $class_methods = get_class_methods(get_class($result));
  35. foreach ($class_methods as $method_name) {
  36.     echo( "$method_name<BR>\n" );
  37. }
  38. echo( "<HR>PROPERTIES:<BR>\n" );
  39. $class_vars = get_class_vars(get_class($result));
  40. foreach ($class_vars as $name => $value) {
  41.     echo( "$name : $value<BR>\n" );
  42. }
  43. function getmicrotime()
  44. {
  45.     list($usec, $sec) = explode(" ",microtime());
  46.     return ((float)$usec + (float)$sec);
  47. }
  48. ?>
  49. </HTML>


 
Ca ne marche que si XSU est installé. Ca retourne le résultat de la requête (ici : 'select * from refcontrole') en XML.
 
C'est buggé à mort et ça rame tellement, que j'ai fini par générer le XML en PHP..., mais c'est un autre exemple d'appel de procédure Oracle en PHP qui retourne un CLOB.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 08-06-2004 à 17:59:44    

Merci beaucoup pour ce code  :jap:

Reply

Sujets relatifs:

Leave a Replay

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