Page 1 sur 1

Procédure stockée, integer tronqué

Posté : mar. 16 août 2022, 11:39:47
par Hurri
Bonjour,

Nous venons de passer notre serveur en V7R4, et je tombe sur un souci.
Certains scripts PHP font appel à des procédures stockées écrites en RPGLE.
L'une d'elle en particulier, est chargée de traiter des données à partir d'un n° d'enregistrement transmis par le script PHP.
Normalement pas de soucis, la procédure stockée n'a qu'un paramètre en E/S, une variable INTEGER contenant le n° d'enregistrement.
Çà a toujours parfaitement fonctionné, mais depuis le passage en V7R4 (PHP 7.3.33), le programme RPGLE appelé se retrouve à traiter les mauvais enregistrements, ce qui devient fâcheux.
Au debug du PHP la variable contient le bon n°.
Mais dans le RPGLE appelé, le dernier chiffre est perdu. Si on demande l'enregistrement 22852 on obtient la valeur 2285 dans le RPGLE. Si on demande le 17451 on obtient le 1745.
J'ai bien entendu tout revérifier, j'ai modifié le RPGLE pour utiliser une variable en 9B 0 au lieu du 10i 0 habituel au cas où. Sans changement.

Quelqu'un aurait une idée ? Je tourne en rond et je deviens dingue.
Merci.

Re: Procédure stockée, integer tronqué

Posté : mar. 16 août 2022, 14:48:42
par Hurri
Bon, j'ai trouvé où çà cloche, et un moyen de solutionner le problème.
Malgré que la valeur soit un entier, PHP doit la traiter lors de l'utilisation de db2_bind_param, comme un smallint parce que la valeur est relativement petite. Si j'utilise un n° d'enregistrement élevé (du genre 150000), çà fonctionne.
Donc j'ai modifié le script PHP pour affecter à la variable servant de paramètre, un intval de la valeur :
$parmValue = intVal($value);

Et là ... çà fonctionne !

Re: Procédure stockée, integer tronqué

Posté : lun. 22 août 2022, 17:24:07
par nbonnet
Merci pour l'info !

Re: Procédure stockée, integer tronqué

Posté : jeu. 20 juil. 2023, 08:27:03
par Franco33
Bonjour,

En effet, en utilisant la fonction intval() pour convertir la valeur en entier, PHP traite correctement le paramètre comme un integer, même s'il s'agit d'une valeur relativement petite.