Преобразование числовых форматов между php и mysql - PullRequest
2 голосов
/ 14 августа 2010

Я уверен, что это что-то действительно простое, вроде неуместной цитаты, но я совершенно в тупике. Я использую запрос на обновление, чтобы ввести данные корзины покупок в таблицу mysql, и у меня возникли серьезные проблемы с балансом карты. Столбец в таблице mysql называется BalanceCurrent и является десятичным (18,2). В моем php-коде (это пользовательский компонент Joomla, поэтому есть некоторые объекты и методы Joomla, такие как JFactory и quote), вот что я делаю:

$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-> quote (number_format ($ this-> balanceRemaining, 2)). Без кавычек (созданных с помощью $ db-> quote вокруг значения) я получаю ошибку 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 ]

2 голосов
/ 14 августа 2010

Я думаю, что запятая разделителя тысяч может быть проблемой. Каков тип данных поля?

Если вы хотите удалить разделитель тысяч, попробуйте: number_format ($ this-> balanceRemaining, 2, '.', '')

1 голос
/ 14 августа 2010

Только не используйте number_format() для вставки данных в базу данных. Это для отображения данных. Для чистого округления используйте функцию round().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...