PDO::PARAM 用于十进制类型?
Posted
技术标签:
【中文标题】PDO::PARAM 用于十进制类型?【英文标题】:PDO::PARAM for type decimal? 【发布时间】:2011-02-12 16:50:11 【问题描述】:我有 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
上? decimal
类型的字段是否有 PDO::PARAM
?如果不是,我应该使用什么解决方法?
【问题讨论】:
请发布您准备的查询 ***.com/questions/1335081/…的可能重复 【参考方案1】:小数/浮点数没有PDO::PARAM
,您必须使用PDO::PARAM_STR
。
【讨论】:
这是我在此处发布问题之前尝试过但没有奏效的方法之一。 @dmontain:尝试将 $decval 定义为字符串(例如:'1.0'
而不是1.0
)或使用strval($decval)
。
@dmontain:它应该开箱即用(PDO::PARAM_STR
是未指定时的默认值),并且您不应该更改您的列数据类型。只需用单引号或双引号或strval()
将值括起来,如下所示:$update_decval->bindParam(':decval', strval($decval), PDO::PARAM_STR);
。
@Alix,我不知道为什么strval
不起作用。这听起来像是一个非常合乎逻辑的答案,但有些东西在那里不起作用。我正在尝试不同的组合,看看它们是否可行。
@dmontain:来自 php 手册:与 PDOStatement::bindValue() 不同,变量被绑定为引用,并且只会在PDOStatement::execute() 被调用。 - 如果你想使用strval()
,你必须使用bindValue()
。【参考方案2】:
UP 必须使用 PDO::PARAM_STR 相同,并注意如果数据库中的列是 NUMERIC (M, D) 或十进制 (M, D) 类型,则应注意 M 是字符数精度应该是您可以输入的字符总数,而 D 是小数位数。在示例 NUMERIC (10,2) 中,我们有 8 个房子到准确的位置和两个小数位。所以我们总共有 10 个字符,其中 2 个保留小数位。
【讨论】:
【参考方案3】:我找到了一个解决方案,发送像PDO::PARAM_STR这样的十进制参数,在sql server存储过程中像decimal(int,dec)那样接收它
PHP
$stmt_e->bindParam(':valor_escala_desde', $valor_escala_desde, PDO::PARAM_STR);
SQL 服务器,存储过程:
@valor_escala_desde decimal(18,2),
完成了。
【讨论】:
【参考方案4】:对所有非 int 或 Bool 类型的列类型使用 PDO::PARAM_STR
【讨论】:
以上是关于PDO::PARAM 用于十进制类型?的主要内容,如果未能解决你的问题,请参考以下文章