PDO:: PARAM pour le type décimal?
, j'ai 2 champs de base de données
`decval` decimal(5,2)
`intval` int(3)
J'ai 2 requêtes pdo qui les mettent à jour. Celui qui met à jour l'int fonctionne bien
$update_intval->bindParam(':intval', $intval, PDO::PARAM_INT);
Mais je ne peux pas mettre à jour le champ décimal. J'ai essayé les 3 façons ci-dessous, mais rien ne fonctionne
$update_decval->bindParam(':decval', $decval, PDO::PARAM_STR);
$update_decval->bindParam(':decval', $decval, PDO::PARAM_INT);
$update_decval->bindParam(':decval', $decval);
Il semble que le problème soit avec le type de base de données decimal
? Est-il PDO::PARAM
pour un champ de type decimal
? Si ce n'est pas le cas, qu'est-ce que j'utilise comme solution de contournement?
4 réponses
Il N'y a pas de PDO::PARAM
pour les décimales / flottants, vous devrez utiliser PDO::PARAM_STR
.
J'ai découvert, en cherchant un moyen de stocker DOULBEs en utilisant PDO, que si vous ne fournissez pas le troisième argument (C'est-à-dire PDO::PARAM_*), il utilise une sorte de magie et stocke le nombre correctement. Alors peut-être que si vous venez de quitter PDO pour vous soucier du type de paramètre et liez joyeusement :decval à un $decval et passez à la tâche suivante: -))
UP doit utiliser le PDO:: PARAM_STR même, et en notant que si la colonne dans la base de données est de type numérique (M, D) ou décimal (M, D)doit être observé que le M est le nombre de caractères précision doit être le total des caractères que vous pouvez entrer, Et D le nombre de décimales. Dans L'exemple numérique (10,2) nous avons 8 maisons à des endroits de précision et deux décimales. Nous avons donc 10 caractères au total avec 2 réservés aux décimales.
J'ai trouvé une solution, envoyez le paramètre décimal comme PDO:: PARAM_STR, dans la procédure de Stockage sql server, recevez-le comme decimal (int,dec)
PHP
$stmt_e->bindParam(':valor_escala_desde', $valor_escala_desde, PDO::PARAM_STR);
SQL SERVER, PROCÉDURE DE STOCKAGE:
@valor_escala_desde decimal(18,2),
Et est fait.