2010-08-13 33 views
1

我确定这是一件非常简单的事情,就像错误的报价一样,但我完全被难住了。我正在使用更新查询将购物车数据输入到MySQL表中,并且在卡平衡方面存在一些主要问题。 mysql表中的列叫做BalanceCurrent,它是一个小数(18,2)。在我的PHP代码(这是一个自定义的Joomla组件,所以有一些的Joomla对象和方法,如JFactory和报价),这里是我在做什么:在php和mysql之间转换数字格式

$rightNow = date("YmdHis"); 
$db =& JFactory::getDBO(); 

$query = "update arrc_Voucher set BalanceCurrent = " . $db->quote(number_format($this->balanceRemaining,2)) . ", UpdateDT = ".$db->quote($rightNow). " where VoucherNbr = ".$db->quote($this->voucherNbr); 
error_log("update query: ".$query); 
$db->setQuery($query); 
if (!$db->query()) error_log("error inside updateVoucher: ".$db->stderr()); 

的问题是这样的:$ DB->报价(number_format($这 - > balanceRemaining,2))。不带引号(用$创建DB->报价围绕价值),我得到一个MySQL错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '950.00, UpdateDT = '20100813150330' where VoucherNbr = '1142100120514884'' at line 1 SQL=update arrc_Voucher set BalanceCurrent = 4,950.00, UpdateDT = '20100813150330' where VoucherNbr = '1142100120514884' 

用引号,没有错误,这是SQL语句的结果(打印到error_log中) :

update query: update arrc_Voucher set BalanceCurrent = '4,950.00', UpdateDT = '20100813150508' where VoucherNbr = '1142100120514884' 

它看起来不错,但问题是,当我真正进入数据库,该BalanceCurrent场现在设置为4.00,而不是4950.00。

任何想法?这真的让我失望。

回答

2

我想千位分隔符逗号可能是一个问题。该字段的数据类型是什么?

如果你想要去除的千位分隔符尝试:number_format( '' $这个 - > balanceRemaining,2, '')

+0

正如我所说,字段(数据库中的列)是十进制(18,2)。在php中使用number_format时,千位分隔符是默认值。我不确定是否有办法摆脱它。它是number_format函数中的可选参数,但如果输入全部四个参数,则需要指定分隔符。我不确定你可以通过给出一个空字符串作为参数来摆脱分隔符。不过,我会尽力的。 – EmmyS 2010-08-13 20:33:48

+0

我很抱歉没有看到你的帖子: 尝试number_format($ this-> balanceRemaining,2,'。',''); – Guillermo 2010-08-13 20:36:43

+0

你需要传递第三个和第四个参数(第三个是十进制字符,第四个是数千):'number_format($ number,2,'。','');' – ircmaxell 2010-08-13 20:37:13

1

只要不将数据插入到数据库中使用number_format()。它用于显示数据。用于纯圆整使用round()函数。

+0

谢谢,但我们不打算轮到。价值将永远是全额美元,不分美分。我们只需要确保它在数据库中以.00结尾。 – EmmyS 2010-08-14 15:11:04

+0

该字段是DECIMAL,所以没关系。无论你存储'1','1.0','1.00',它们都将导致存储'1.00'。最好的例子是,当你试图存储'4,950.00'时,它只用了前面的'4'并且存储为'4.00' – Mchl 2010-08-15 07:27:47