Intereting Posts
Возможно ли иметь $ _SESSION = $ _POST? Swift: как запросить внешнюю базу данных для входа в систему? Утилита PHP-графика? PHP и MySQLi close () Отобразить список элементов, сгруппированных по годам и месяцам в TYPO3 Fluid Как обрабатывать push-уведомления API Google Calendar? Использование preg_match в многомерном массиве для возврата массивов ключевых значений Разрешение отклонено при открытии файла с помощью file_get_contents; webbrowser может открыть его без проблем Возможны ли 301 переадресации с помощью javascript или jQuery? Почему удаленные данные все еще появляются в интерфейсе? Групповой массив по значению ключей PHP Как исправить Уведомление: Неопределенная переменная: PHP: подсчитайте элементы в массиве, разделите их на два, создайте два списка UL с одинаковым количеством элементов, содержащих элементы из массива store_result () и get_result () в mysql возвращает false PHP / Sphinxsearch – поиск строки или lat lng

PHP float / double хранится как MySQL DECIMAL

Я столкнулся с действительно странной проблемой хранения значений в MySQL. Предпосылка:

У меня есть таблица, которая использует DECIMAL(15,8) для хранения денежных значений (например, всего порядка), но когда я пытаюсь вставить, например:

 2,45545345 

это сохраняется как

 2.00000000 

Я пробовал MySQL функции FORMAT / CAST, но все тот же результат.

Вот как генерируется запрос:

 $db->query("INSERT INTO `random_table_name` SET currency_value = '" . floatval($value) . "'"); 

Я также попробовал doubleval , но тот же результат. Самое смешное в том, что эта же часть кода работала нормально пару недель назад, и я не могу вспомнить никаких изменений в структуре db или классе db, которые могут вызвать это.

    Используйте num_format для замены .

    Как это:

     number_format($value, 8, '.') // 8 = number of decimals, . = decimal separator 

    Однако ваша проблема, похоже, связана с текущей локалью. Вам нужно изучить следующее: setlocale () и localeconv

     setlocale(LC_ALL, 'en_US'); // NOT TESTED, read up on the appropriate syntax 

    Это подходящий способ сделать это, альтернативой было бы (как предложено ниже) сделать str_replace(',', '.') , Но вы должны делать обратный каждый раз, когда хотите вывести строки.

    Однако есть еще один вариант, вы можете установить локаль MySQL в en_US .

    Замените , с . перед вставкой в ​​db:

     $value = str_replace( ',', '.', $value); 

    Это создаст допустимое число, которое можно безопасно вставить в базу данных. Или просто добавьте его прямо в свой запрос:

     INSERT INTO `random_table_name` SET currency_value = '" . str_replace( ',', '.', $value ) . "'