Php 如何正确地将十进制数发送到mysql数据库?

Php 如何正确地将十进制数发送到mysql数据库?,php,mysql,pdo,Php,Mysql,Pdo,我试图让MySQL十进制字段类型工作得很好,但我就是搞不懂。我将$\u POST['price']字段发送到十进制字段,例如3.45,它总是将其存储为3.00 如果它不存储小数,我会做错什么 找到解决方案: PDO并没有十进制存储类型,似乎有很多东西需要错过。需要将其存储为字符串而不是数字。将$\u POST['price']变量从字符串转换为浮点时,请使用floatval()。此值应存储在数据库中 不过要小心在计算价格时,由于可能存在舍入误差,浮点算法不是很好。在处理价格时,我通常使用整数运算

我试图让MySQL十进制字段类型工作得很好,但我就是搞不懂。我将
$\u POST['price']
字段发送到十进制字段,例如
3.45
,它总是将其存储为
3.00

如果它不存储小数,我会做错什么

找到解决方案:

PDO并没有十进制存储类型,似乎有很多东西需要错过。需要将其存储为字符串而不是数字。

$\u POST['price']
变量从字符串转换为浮点时,请使用
floatval()
。此值应存储在数据库中

不过要小心在计算价格时,由于可能存在舍入误差,浮点算法不是很好。在处理价格时,我通常使用整数运算,然后手动输入小数点


因此,在您的示例中,我将存储
345
以表示
$3.45

您能为问题添加一些代码吗?至少,您用来写入数据库的PHP和表定义也会有帮助。将列的数据类型更改为十进制(10,2)该列的架构定义是什么?更新了它,找到了答案您肯定必须通过
PDO::PARAM_STR
转义它,然后DB引擎应该为您进行转换“纯插入”-也就是说…如果您在查询中进行一些计数,它也应该这样做。如果出于任何原因,您的DB引擎不知道算术运算符(+、-、*、…)形式的指令,您可以
CAST()
/
CONVERT()
-但我不建议这样做……无论如何,第二个主要问题是为列提供正确的数据类型。