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?

63
demandé sur Your Common Sense 2010-04-27 07:58:46

4 réponses

Il N'y a pas de PDO::PARAM pour les décimales / flottants, vous devrez utiliser PDO::PARAM_STR.

68
répondu Alix Axel 2010-04-27 04:28:11

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: -))

0
répondu Peter Perháč 2010-08-02 11:37:25

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.

0
répondu Gil 2013-08-06 19:41:23

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.

0
répondu julio castillo 2015-09-29 23:15:01