Mysql Проверка целых чисел для вставки в SQL запрос

fixxxer

К.О.
Партнер клуба
Код:
$ php -r 'foreach([INF,+INF,-INF,NAN] as $v) var_dump($v, number_format($v), intval($v)) || print("\n");'
float(INF)
string(3) "inf"
int(0)

float(INF)
string(3) "inf"
int(0)

float(-INF)
string(3) "inf"
int(-9223372036854775808)

float(NAN)
string(3) "nan"
int(-9223372036854775808)
 

Вурдалак

Продвинутый новичок
я бы дописал так
PHP:
	static public function escapeInt($value)
	{
		if (is_float($value))
		{
			if ($value > PHP_INT_MAX){
				self::getInstance()->error("Large float value [$value] can not be converted to string presizely");
			}
			return number_format($value, 0, '.', '');
		} 
		elseif (is_int($value))
		{
			return (string)$value;
		}
		elseif (is_string && is_numeric(trim($value)))
		{
			return trim($value);
		}
		else
		{
			self::getInstance()->error("Invalid value for ?i (int) placeholder (".gettype($value).")");
		}
	}
Делать метод static'ом, чтобы бы потом в нем получать инстанс — к черту логику. :)
 

Checker

Новичок
fixxxer написал(а):
а че так сложно
INF, +INF, -INF, NAN
Здесь главное было - идея. :) А она выразилась коротким способом генерации -inf

grigori
if (abs($value) > PHP_INT_MAX){
и, пожалуй, еще:
если $value - длинная строка цифр, то также будут проблемы
 

fixxxer

К.О.
Партнер клуба
хихихи тут вообще смехота

$ php -r 'var_dump(-9223372036854775807);'
int(-9223372036854775807)

пока все нормально... но вообще-то еще запас у инта на единичку есть...

$ php -r 'var_dump(-9223372036854775808);'
float(-9.2233720368548E+18)

ЩИТОООООООО? хм. ну ладно, а если так

$ php -r 'var_dump(-9223372036854775807 - 1);'
int(-9223372036854775808)

ЛОЛШТО

$ php -r 'var_dump(abs(-9223372036854775807 - 1));'
float(9.2233720368548E+18)

ну тут логично конечно :)
 
Сверху