85 votes

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 deux requêtes pdo qui les mettent à jour. Celle qui met à jour les 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 méthodes 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 lié au type de base de données decimal ? Existe-t-il un PDO::PARAM pour un champ de type decimal ? Si non, que dois-je utiliser comme solution de rechange ?

0 votes

Veuillez afficher la requête que vous préparez

0 votes

Duplicata possible de stackoverflow.com/questions/1335081/

106voto

Alix Axel Points 63455

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

2 votes

C'est l'une des choses que j'ai essayées et qui n'a pas fonctionné avant de poster la question ici.

0 votes

@dmontain : Essayez de définir $decval comme une chaîne de caractères (ex. : '1.0' au lieu de 1.0 ) ou utiliser strval($decval) .

6 votes

@dmontain : Cela devrait fonctionner dès la sortie de la boîte ( PDO::PARAM_STR est la valeur par défaut lorsqu'aucun n'est spécifié), et tu ne devrais pas changer le type de données de votre colonne. Il suffit d'entourer la valeur de guillemets simples ou doubles ou de strval() comme ceci : $update_decval->bindParam(':decval', strval($decval), PDO::PARAM_STR); .

0voto

julio castillo Points 11

J'ai trouvé une solution, envoyer le paramètre décimal comme PDO::PARAM_STR, dans la procédure sql server store le recevoir comme decimal(int,dec)

PHP

$stmt_e->bindParam(':valor_escala_desde', $valor_escala_desde, PDO::PARAM_STR);

SERVEUR SQL, PROCÉDURE DE STOCKAGE :

@valor_escala_desde decimal(18,2),

et c'est fait.

0voto

Paul Kiarie Points 27

Utiliser PDO::PARAM_STR pour tous les types de colonnes qui ne sont pas de type int ou Bool

0voto

Peter Perháč Points 8007

J'ai découvert, en cherchant un moyen de stocker les 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 laissiez PDO se soucier du type de paramètre et lier joyeusement :decval à un $decval et passer à la tâche suivante :-))

0voto

Gil Points 1

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 NUMERIC (M, D) ou décimale (M, D) devrait être observé que le M est le nombre de caractères de précision devrait être le total des caractères que vous pouvez entrer, et D le nombre de décimales. Dans l'exemple NUMERIC (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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X