нечетный запрос при доступе php к данным из mysql

Предисловие

После того, как я выполнил запрос через mysql_query () в php

«обновить установленную сумму сделки = сумма-100, где идентификатор = 123»

Если предыдущее значение суммы было 101, после минус 100 , значение должно быть 1.
Но я проверил данные по-разному:

1. Прямой запрос в mysql:

возвращается с 0.780009989(какая-то фигура, как эта, часть «0,78» актуальна, после того, как это просто образец от меня, я не могу вспомнить точно, но я думаю, что это не имеет значения)

2. Использование php:

при использовании mysql_fetch_object () в php,он по-прежнему возвращает правильный ответ «1».

Тестовое задание

Я выполнил тест выполнения запроса 100 раз в цикле,но «ошибка» не всегда возникает, просто иногда.

Вопрос:

Возможно ли это вызвано неопределенной длиной и десятичной длиной клона «сумма»?
Почему php funciton может получить это правильно?
Пожалуйста скажите мне, что-то пошло не так.

Подробная информация о таблице и столбце, как показано ниже:

СОЗДАТЬ СТОЛ trade(
id int (11) NOT NULL AUTO_INCREMENT,
amountдвойное НЕ NULL,
ОСНОВНОЙ КЛЮЧ (id))
ENGINE = InnoDB AUTO_INCREMENT = 123 DEFAULT CHARSET = utf8;

1

Решение

Да, это вызвано double тип поля количества, и если вам нужна точность, используйте DECIMAL, Измените тип и посмотрите, получите ли вы то, что хотите:

ALTER TABLE trade MODIFY amount DECIMAL(10,2);

Это будет хранить 10 цифр (8 до десятичной точки и 2 после). Измените это, чтобы отразить данные, которые вы будете хранить в вашей БД.

0

Другие решения

Попробуй это:

 update trade set amount=CAST(amount AS SIGNED)-100 where id=123;

Ref: http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html#function_cast

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector