web-dev-qa-db-ja.com

タイプdecimalのPDO :: PARAM?

2つのデータベースフィールドがあります

`decval` decimal(5,2)
`intval` int(3)

それらを更新する2つのpdoクエリがあります。 intを更新するものは正常に動作します

$update_intval->bindParam(':intval', $intval, PDO::PARAM_INT);

しかし、小数フィールドを更新することはできません。私は以下の3つの方法を試しましたが、何も動作しません

$update_decval->bindParam(':decval', $decval, PDO::PARAM_STR);
$update_decval->bindParam(':decval', $decval, PDO::PARAM_INT);
$update_decval->bindParam(':decval', $decval);

問題はデータベースタイプdecimalにあるようです。ありますか PDO::PARAMタイプdecimalのフィールドの場合そうでない場合、回避策として何を使用しますか?

70
dmontain

小数/浮動小数点用のPDO::PARAMはありません。PDO::PARAM_STRを使用する必要があります。

76
Alix Axel

UPはPDO :: PARAM_STRと同じものを使用する必要があり、データベース内の列がNUMERIC(M、D)または10進数(M、D)のタイプである場合、Mは文字数の精度であることに注意してください入力できる文字の合計、D小数点以下の桁数。 NUMERIC(10,2)の例では、正確な場所と小数点以下2桁までの8つの家があります。したがって、合計10文字で、小数点以下に2文字が予約されています。

0
Gil

私は解決策を見つけました、PDO :: PARAM_STRのようなdecimalパラメータを送信し、sqlサーバーストアプロシージャでdecimal(int、dec)のようにそれを受け取ります

PHP

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

SQLサーバー、ストアプロシージャ:

@valor_escala_desde decimal(18,2),

完了です。

0
julio castillo