|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||||
|
Membre du Club
![]() Inscription : mai 2004 Messages : 99 ![]() |
Bonjour,
Je ne suis pas certain de poster au bon endroit, j'ai posté là où bon me semblait, désolé si ce n'était pas le meilleur endroit pour cette problématique. Ma problématique est la suivante : Je suis dans une application PHP (j'utilise notamment ZEND) et j'ai besoin depuis php d'appeler une procédure SQL située sur un système iSeries (AS400) dans une base de données DB2. Ma problématique se situe au niveau du passage de paramètres. Ma procédure SQL est déclarée avec 2 paramètres, 1 premier paramètre en entrée de type char (qui ne pose pas de problèmes), et un deuxième paramètre en entrée/sortie de type int (que je n'arrive pas à gérer). Je n'ai pas réussi à mettre la main sur une doc ou un bout de code mettant en oeuvre un passage de paramètre de type int dans ce cadre. Voici le code : côté php : Code :
$ret = i5_paramdesc($stmt, I5_TYPE_INT, 0, 9, 0, I5_INOUT) pour le type char pas de problème par contre je trouvé aucun exemple avec le type "I5_TYPE_INT" et c'est les paramètres 3, 4 et 5 de i5_paramdesc qui me pose problème car je ne sais pas quelles valeurs assigner, ils représentent respectivement : 3-Sequence – Parameter sequential number (starting from 0) 4-Length – Parameter length 5-Decimals – Number of decimal position for the numeric parameter type j'obtiens le code erreur -180 et le SQLState : 22007 soit : Citation:
côté iSeries (AS400) DB2 : Code :
Si quelqu'un trouve la réponse je dis chapeau
|
|||||
|
|
00
|
|
|
#2 | ||||||
|
Membre du Club
![]() Inscription : mai 2004 Messages : 99 ![]() |
Je n'ai pas encore tout résolu sur le sujet, néanmoins j'ai réussi a avancer un peu, donc je vais poster le résultat de mon avancée car cela pourra peut être servir à quelqu'un confronté au même problème.
côté php, le bout de code concernant la connexion : Code :
Code :
$stmt= i5_prepare($sql, $this->_conn); Donc, comme je ne passais pas la connexion en paramètres, et que dans ma procédure SQL sur DB2 iSeries j'effectuais un insert dans une table non préfixée, j'obtenais une erreur car il était alors impossible de trouver la table. Et j'interpretais mal cette erreur en pensant qu'elle était due à une mauvaise implémentation du passage de paramètre de type int. ![]() Une fois que j'ai préfixé mes tables dans ma procédure SQL DB2 sur iSeries, j'ai pu aisément passer un paramètre InOut de type integer. Entre temps, ayant découvert qu'on pouvait passer en paramètre la connexion au i5_prepare, je me suis dit chouette je vais pouvoir enlever les préfixes à mes tables dans la procedure SQL. Ce que j'ai fait, et je me suis de nouveau confronté à la même erreur !!!! bien que la connexion soit passée en paramètre dans le i5_prepare, si les tables ne sont pas préfixées côté procedure iSeries ça ne fonctionne pas. Voici donc ce que ça donne côté php : Code :
et coté procedure iSeries : Code :
Est ce que quelqu'un comprend pourquoi je suis obligé de préfixer mes tables cote procedure iSeries pour que cela fonctionne ? Je précise que je n'ai pas ce problème quand j'utilise i5_query auquel je passe en paramètre la connexion, mes tables ne sont pas préfixées coté procedure iSeries et cela fonctionne quand même. |
||||||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com