Простую альтернативу этой проблеме можно решить, предоставив соответствующие разрешения в самой базе данных. Например: если вы используете базу данных mysql, введите в базу данных через терминал или предоставленный интерфейс и просто следуйте этой команде:
GRANT SELECT, INSERT, DELETE ON database TO username@'localhost' IDENTIFIED BY 'password';
Это ограничит пользователя ограничиться только указанным запросом только. Удалите разрешение удаления, и поэтому данные никогда не будут удалены из запроса, запущенного с php-страницы. Второе, что нужно сделать, это очистить привилегии, чтобы mysql обновлял разрешения и обновления.
FLUSH PRIVILEGES;
Дополнительная информация о flush .
To см. текущие привилегии для пользователя, вызывают следующий запрос.
select * from mysql.user where User='username';
Подробнее о GRANT .
Сделайте НЕ использование NSNumber
+numberWith...
методы для создания NSDecimalNumber
объекты. Они, как объявляют, возвращаются NSNumber
объекты и, как гарантируют, не будут функционировать как NSDecimalNumber
экземпляры.
Это объяснено в этом поток Bill Bumgarner, разработчиком в Apple. Я поощрил бы Вас регистрировать ошибку против этого поведения, сославшись на ошибку rdar://6487304.
Как альтернатива это все соответствующие методы для использования для создания NSDecimalNumber
:
+ (NSDecimalNumber *)decimalNumberWithMantissa:(unsigned long long)mantissa
exponent:(short)exponent isNegative:(BOOL)flag;
+ (NSDecimalNumber *)decimalNumberWithDecimal:(NSDecimal)dcm;
+ (NSDecimalNumber *)decimalNumberWithString:(NSString *)numberValue;
+ (NSDecimalNumber *)decimalNumberWithString:(NSString *)numberValue locale:(id)locale;
+ (NSDecimalNumber *)zero;
+ (NSDecimalNumber *)one;
+ (NSDecimalNumber *)minimumDecimalNumber;
+ (NSDecimalNumber *)maximumDecimalNumber;
+ (NSDecimalNumber *)notANumber;
, Если Вы просто хотите NSDecimalNumber
от float
или int
постоянная попытка что-то вроде этого:
NSDecimalNumber *dn = [NSDecimalNumber decimalNumberWithDecimal:
[[NSNumber numberWithFloat:2.75f] decimalValue];
Мудрый дизайном, Вы должны постараться не преобразовывать NSDecimalNumber или NSDecimals к и от интервала, плавания, и дважды оцениваете по тем же причинам, это рекомендовало использовать NSDecimalNumbers: потеря точности и двоичных проблем представления с плавающей точкой. Я знаю, иногда это неизбежно (взятие входа от ползунка, выполнение тригонометрических вычислений, и т.д.), но необходимо попытаться взять вход от пользователей как NSStrings и затем использовать initWithString:locale: или decimalNumberWithString:locale: генерировать NSDecimalNumbers. Сделайте всю свою математику с NSDecimalNumbers и возвратите их представление пользователям или сохраните их к SQLite (или везде, где) как их строковое описание с помощью descriptionWithLocale:.
, Если необходимо ввести от интервала, плавания, или дважды, Вы могли бы сделать что-то как следующее:
int myInt = 3;
NSDecimalNumber *newDecimal = [NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:@"%d", myInt]];
или Вы могли следовать за предложением Ashley, чтобы удостовериться, что Вы в безопасности в десятичной конструкции.