我确定这是一件非常简单的事情,就像错误的报价一样,但我完全被难住了。我正在使用更新查询将购物车数据输入到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。
任何想法?这真的让我失望。
正如我所说,字段(数据库中的列)是十进制(18,2)。在php中使用number_format时,千位分隔符是默认值。我不确定是否有办法摆脱它。它是number_format函数中的可选参数,但如果输入全部四个参数,则需要指定分隔符。我不确定你可以通过给出一个空字符串作为参数来摆脱分隔符。不过,我会尽力的。 – EmmyS 2010-08-13 20:33:48
我很抱歉没有看到你的帖子: 尝试number_format($ this-> balanceRemaining,2,'。',''); – Guillermo 2010-08-13 20:36:43
你需要传递第三个和第四个参数(第三个是十进制字符,第四个是数千):'number_format($ number,2,'。','');' – ircmaxell 2010-08-13 20:37:13