PDO :: PARAM是十进制的types吗?
我有2个数据库字段
`decval` decimal(5,2) `intval` int(3)
我有2个更新它们的pdo查询。 更新int的工作正常
$update_intval->bindParam(':intval', $intval, PDO::PARAM_INT);
但是我不能更新小数字段。 我已经尝试了以下三种方式,但没有任何工作
$update_decval->bindParam(':decval', $decval, PDO::PARAM_STR); $update_decval->bindParam(':decval', $decval, PDO::PARAM_INT); $update_decval->bindParam(':decval', $decval);
看来问题是数据库types的decimal
? 是否有一个PDO::PARAM
types的decimal
字段? 如果不是,我该如何解决这个问题?
对于小数/浮点数没有任何PDO::PARAM
,您将不得不使用PDO::PARAM_STR
。
我发现,寻找一种使用PDO存储DOULBE的方法,如果你不提供第三个参数(即PDO :: PARAM_ *),它会使用某种魔法并正确存储数字。 所以也许如果你只是离开PDO担心参数types,并愉快地绑定:decval到一个$ decval和跳转到下一个任务:-))
UP必须使用相同的PDO :: PARAM_STR,并且注意如果数据库中的列是NUMERICtypes(M,D)或者十进制数(M,D),那么应该观察到M是字符数的精度应该是您可以input的字符总数,以及D小数位数。 在NUMERIC(10,2)的例子中,我们有8个房子的精度和两位小数的地方。 所以我们共有10个字符,其中2个保留小数位。
我find了一个解决scheme,像PDO :: PARAM_STR发送小数参数,在sql服务器存储过程收到它像十进制(int,dec)
PHP
$stmt_e->bindParam(':valor_escala_desde', $valor_escala_desde, PDO::PARAM_STR);
SQL SERVER,存储过程:
@valor_escala_desde decimal(18,2),
并完成。