В результате долгих размышлений родил вот это:
Для максимального значения bigint оно вернёт
Собственно, из-за значений, превышающих размер ПХП-шного инта, но валидных для мускуля, и сделаны все эти пляски с бубном.
Только регом проверять нельзя, поскольку значение будет приведено к строке со всеми вытекающимися:
Вопрос. Чоязабыл?
Можно ли сделать лучше/красивше?
PHP:
function escapeInt($value)
{
if (is_int($value) || is_float($value))
{
return number_format($value, 0, '.', '');
}
elseif(preg_match('/^-?[0-9]+$/', $value))
{
return $value;
}
else
{
$this->error("Invalid value");
}
}
PHP:
$var=18446744073709551615;
var_dump($var,gettype($var),escapeint($var));
float(1.844674407371E+19)
string(6) "double"
string(20) "18446744073709551616"
$var="18446744073709551615";
var_dump($var,gettype($var),escapeint($var));
string(20) "18446744073709551615"
string(6) "string"
string(20) "18446744073709551615"
Только регом проверять нельзя, поскольку значение будет приведено к строке со всеми вытекающимися:
PHP:
$var=18446744073709551615;
var_dump($var,gettype($var),preg_match('/^-?[0-9]+$/', $var));
float(1.844674407371E+19)
string(6) "double"
int(0)
Можно ли сделать лучше/красивше?