Petit nouveau ! |
2 Messages
25 janv. 2007, 10:02
premiers éléments de réponses :
pour les paramètres décimaux étendus
. dans la déclaration de procédure stockée, déclarer le paramètre en char
. dans l'appel PDO utiliser PDO::PARAM_STR
. dans le PHP, une petite gymnastique de mise en forme est nécessaire:
caler le nombre à droite avec remplissage par des zéros non signficatifs à droite, de même remplir les caractères de gauche vides par des zéros
Exemple : sur un étendu de 5 dont 2 décimales, 14,2 doit se mettre en forme comme '01420'
De la même manière un traitement de mise en forme du résultat sera nécessaire dans l'autre sens (enlever les zéros à droite et à gauche, et positionner la virgule)
Remarque importante, la déclaration de paramètre doit se faire avec une position de plus (je n'ai pas encore compris pourquoi)
ainsi, si le paramètre I/O fait 8 de long, la déclaration de paramètre doit se faire comme suit :
$stmt->bindParam(1, $a, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 9);
pour les paramètres date
. dans la déclaration de procédure stockée, déclarer le paramètre en char de 10 toujours
. dans l'appel PDO utiliser PDO::PARAM_STR
. dans le PHP, une petite gymnastique de mise en forme est nécessaire:
si la procédure stockée gère la zone date en représentation *ISO, évidemment la date doit être structurée en AAAAMMDD mais en plus doit être séparée par des tirets, soit au final AAAA-MM-DD.
Il faudra également adapter pour les représentations *EUR, *USA...
Remarque importante, la déclaration de paramètre doit se faire avec une position de plus
$stmt->bindParam(1, $a, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 11);
pour les paramètres heure
. dans la déclaration de procédure stockée, déclarer le paramètre en char de 8 toujours
. dans l'appel PDO utiliser PDO::PARAM_STR
. dans le PHP, une petite gymnastique de mise en forme est nécessaire:
si la procédure stockée gère la zone heure en représentation *ISO, l'heure doit être structurée en HHMMSS mais en plus doit être séparée par des points, soit au final HH.MM.SS .
Il faudra également adapter pour les représentations *EUR, *USA...
Remarque importante, la déclaration de paramètre doit se faire avec une position de plus
$stmt->bindParam(1, $a, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 9);
pour les paramètres décimaux packés
dans la déclaration de procédure stockée, déclarer le paramètre en decimal
dans l'appel PDO utiliser PDO::PARAM_INT
Voilà, j'espère que ces éléments d'information pourront aider ceux qui utilisent les procédures stockées. N'hésitez pas à compléter ou à ajuster...