我已经接管了一个项目,而且由于之前的开发人员使用的是Mysqli,我已经坚持了下来。我已经转而使用预备语句了。
我想知道处理用户货币价值的最佳方法是什么。将变量绑定为double时,如果输入类似 5.99 ,则可以正常工作。但我们在这里讨论用户的输入,因此我可以想象他们输入 $ 5.99 或 100,000 (使用美元符号或逗号)的情况。仅使用绑定,存储的值最终分别为 0.00 和 100.00 。列类型在数据库中是十进制(10,2)。
可能有几种不同的方法来解决这个问题,例如阻止用户键入这些字符或从前端进行验证,或者可能在后端进行其他形式的数据卫生。但是我想知道别人会为这个案子做些什么。我不能保持原样,因为我知道有人会忽视这个价值不是他们最初输入的事实。
任何输入都表示赞赏。谢谢!
答案 0 :(得分:1)
不要做MySQL方面,你的应用程序应该能够解决用户的意思。我建议
http://php.net/manual/en/numberformatter.parsecurrency.php
如果它很关键,我还建议将用户输入的原始字符串存储为varchar,以便稍后进行验证/错误修复。
$fmt_cur = numfmt_create( 'en_US', NumberFormatter::CURRENCY );
$fmt = numfmt_create( 'en_US', NumberFormatter::DECIMAL );
$amounts = array("$5.99", "100,000");
foreach ($amounts as $a) {
($b = numfmt_parse_currency($fmt_cur, $a, $curr)) ||
($b = numfmt_parse($fmt, $a));
var_dump( $b );
}
返回
double(5.99)
double(100000)