2010-08-13 38 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