Procédure stockée, integer tronqué

configuration Apache, Zend et PHP , Web services
Répondre
Hurri
Messages : 16
Enregistré le : lun. 02 nov. 2020, 16:04:59

Procédure stockée, integer tronqué

Message 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.

Hurri
Messages : 16
Enregistré le : lun. 02 nov. 2020, 16:04:59

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

Message 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 !

nbonnet
Messages : 159
Enregistré le : mar. 11 sept. 2018, 08:20:13
Localisation : Lyon

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

Message par nbonnet »

Merci pour l'info !
Nathanaël

Répondre