[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с UPDATE. float заносится как int
Страницы: 1, 2
grisha2013
Никак не могу понять, в чем проблема если это не хостер виноват.

При внесении данных в базу, все корректно работает, INSERT INTO отправляет данные из переменной типа float в поле базы типа float

Но при выполнении UPDATE, значение переменной float заносится в базу как int.
Но поле в базе по прежнему float.

Почему такой сбой происходит именно на хостинге?

На локальном сервере под Endels все корректно работает. Запись в поле float корректно обновляется как при INSERT, так и при UPDATE запросе.
KAMAEL
Попробуй сделать вместо флота - double.
grisha2013
С float еще вылез баг, если вносится значение близкое к целому, например 10.03 то округляется до 10. Бред какой-то. Переключил на double и стало нормально, НО, если я определяю переменную как float или double то в базу число пишется как int

Если принимаю значение так, то все нормально.

if(isset($_POST['max_draw'])) 
{
$max_draw = $_POST['max_draw'];
}


если-же делаю так, то никакого double либо float в базу не попадает.
if(isset($_POST['max_draw'])) 
{
$max_draw = (double) $_POST['max_draw'];
}

Я хотел привести тип переменной для фильтрации входящих данных из POST, но делается только хуже.
grisha2013
Блин, да что за ерунда на сервере происходит. Теперь при обновлении данных, происходит хз, что. Получается запись 193.639999 вместо 193.64 или около того. Бред какой-то. на локалхосте все работало нормально и с float. Что мне делать, пинать хостера или проблема не в нем?
SoMeOnE
Проверь в ручную сможешь занести желаемое значение.
T1grOK
Цитата (grisha2013 @ 30.07.2013 - 12:36)
Получается запись 193.639999 вместо 193.64 или около того.

float не точный тип данных. Результат ожидаем и вполне нормален.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
grisha2013
Цитата (T1grOK @ 30.07.2013 - 14:56)
float не точный тип данных. Результат ожидаем и вполне нормален.

Значит перед записью его нужно нормализовывать?
если хранить данные как double то такой фигни с точностью не будет?

В поддержке хостера спрашивал, насчет того, почему в базу не пишется float либо double. Пока ничего определенного, говорят, возможно различие в версиях сервера БД. У меня 5.30, на хосте 5.32, но под линуксом, а у меня win 7.
Может ОС как-то влиять на работу БД?
sergeiss
grisha2013, тебе уже ответили, это нормально, данные флоат и дабл хранятся с некоторой точностью. Поэтому округление, как ты показываешь, вполне нормально.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
T1grOK
decimal должен подойти.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
grisha2013
Пробовал, все одно сбоит...

В общем, вот что происходит, опишу еще раз...

Сбой происходит в двух случаях.
В первом случае, когда я принимаю переменную из $_POST и явно определяю ее тип как float, чтобы ничего лишнего не попало от юзера.
На локалхосте данные заносятся в поле нормально, а на сервере как целое число. Независимо от того, какого типа поле в базе и переменная, float, double или decimal.
if(isset($_POST['equity']))  
{
$equity = (float) $_POST['equity'];
}


Но если переменную не приводить к типу float (или к double, decimal) явно, то данные на хостинге вносятся в базу без проблем.
if(isset($_POST['equity']))  
{
$equity = $_POST['equity'];
}



Во втором случае, данные не вносятся корректно если переменная получена в результате вычислений.
Например, результат расчета почти всегда является числом с плавающей точкой.
$result = round($koeff * ($data['value1']/$data['value2']),2)*100;  

и если значение переменной $result вывести с помощью echo то все нормально, например, будет значение 125.84
но при отправке в базу
$query = "UPDATE `test1` SET `data`='$data' WHERE`id`='$id'";  
$res = mysql_query($query,$db)


заносится целое число в поле float, несмотря на то, что в переменной нормальное значение. А получается, как-будто в базу передается в любом случае int

Тип таблиц MyISAM, кодировка utf8_bin

Если в phpMyAdmin выполнить запрос, то данные вносятся корректно.
Запрос вида:
UPDATE `test2` SET `float`=456.84 WHERE `id`=1  


выполнился успешно. Проблема возникает именно при работе с переменными, в которых передается значение в запрос.
Значит проблема скорее всего в настройках php. В поддержке хостера посоветовали установить необходимые параметры php, в файле php.ini, в корне сайта.

Теперь вопрос, какие параметры мне нужно установить в php.ini чтобы на сервере хостера все работало так-же как и у меня?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.