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

Redjik

Джедай-мастер
Думаю, да, если у него будет свой класс, то потом ему можно назначить свою уникальную обработку...
Кому то в лог хочется писать ошибки, кто-то при отладке захочет trace сделать...
 

Фанат

oncle terrible
Команда форума
Думаю, да, если у него будет свой класс, то потом ему можно назначить свою уникальную обработку...
Кому то в лог хочется писать ошибки, кто-то при отладке захочет trace сделать...
Всё для вас =)
PHP:
	private function error($err)
	{
		$err  = __CLASS__.": ".$err;
		
		if ( $this->emode == 'error' )
		{
			$err .= ". Error initiated in ".$this->caller().", thrown";
			trigger_error($err,E_USER_ERROR);
		} else {
			throw new $this->exname($err);
		}
	}
Хотя количество настроек уже начинает поднапрягать... Хорошо, что для всех есть дефолтные значения.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
>количество настроек уже начинает поднапрягать
ты главное не останавливайся - и месяцев через пять у тебя будет свой фреймворк :)
 

Фанат

oncle terrible
Команда форума
>количество настроек уже начинает поднапрягать
ты главное не останавливайся - и месяцев через пять у тебя будет свой фреймворк :)
вот фигу тебе с маслом.
Во-первых, я злой на feature-request-ы. Тот, что выше - исключение.
А во-вторых, оно так у строено, что не требует добавления функционала, позволяя собрать любой запрос из говна и палок из безопасных кусочков, а большего мне и не надо.
 

Фанат

oncle terrible
Команда форума
Вот, кстати, коллега мне только что попенял на то, что пустая строка вызывает ошибку.
Как, на ваш взгляд, лучше поступать - правильнее или удобнее?кидать ошибку или приводить к инту?

а если не пустая строка, а "33sobaki"?
 

damner2

Новичок
Вот, кстати, коллега мне только что попенял на то, что пустая строка вызывает ошибку.
Как, на ваш взгляд, лучше поступать - правильнее или удобнее?кидать ошибку или приводить к инту?

а если не пустая строка, а "33sobaki"?
Кидать ошибку - нехер баловаться.

А что ты делаешь, если в плейсхолдер, в котором ожидается строка, передают массив? Приводишь к строке или кидаешь ошибку?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
я бы дописал так
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).")");
		}
	}
Вопрос: зачем статическую функцию делать приватным методом? Ты ничего в нем не инкапсулируешь.

кстати, "Invalid value for ?i (int) placeholder: [$value]" писать не надо потому что при передаче в параметр массива будет Notice
 

Фанат

oncle terrible
Команда форума
Вопрос: зачем статическую функцию делать приватным методом?
Насчёт статики не очень понял, но про приватность скажу.
Методу escapeInt(), как и всем остальным искейпам, АБСОЛЮТНО нечего делать на публике. Это принципиальный вопрос
 

Фанат

oncle terrible
Команда форума
А вот и ни хрена.
is_numeric же фальшивит.
так что, всё-таки
PHP:
private function escapeInt($value)
{
    if (is_float($value))
    {
        return number_format($value, 0, '.', ''); // may lose precision on big numbers
    }
    elseif(preg_match('/^-?[0-9]+$/', $value))
    {
        return (string)$value;
    }
    else
    {
        $this->error("Invalid value");
    }
}
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума

Фанат

oncle terrible
Команда форума
не вижу подтверждения
Да тут-то как раз всё просто,
PHP:
var_dump(is_numeric("1.844674407371E+19")); //bool(true)
- она пропустит экспоненциальный формат, который получится, если мы раньше где-то успеем привести флоат к строке.

Честно говоря, меня больше интересует тема про статик-публик :)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Да тут-то как раз всё просто,

- она пропустит экспоненциальный формат, который получится, если мы раньше где-то успеем привести флоат к строке.
а что в нем плохого? если ты пропускаешь float - надо назвать метод escapeNum и пропускать экспоненту

>тема про статик-публик
ну как-бы тут все просто: если ты не инкапсулируешь данные, а только обрабатываешь их - это не метод объекта, а просто функция в namespace класса, ей логично оставаться статической, пусть и приватной
 

Фанат

oncle terrible
Команда форума
а что в нем плохого? если ты пропускаешь float - надо назвать метод escapeNum и пропускать экспоненту
дело в том, что это не флоат, а срока.
но вообще да- возможно, опять оверинжиниринг.
Черт. кто бы мог подумать, что с такой сраной задачей, как проверка инта будет столько возни.
 

weregod

unserializer
да-да, небесконечнобитные числа такие небесконечнобитные числа
 

Checker

Новичок
А вот и ни хрена.
is_numeric же фальшивит.
так что, всё-таки
PHP:
private function escapeInt($value)
{
    if (is_float($value))
    {
        return number_format($value, 0, '.', ''); // may lose precision on big numbers
    }
    elseif(preg_match('/^-?[0-9]+$/', $value))
    {
        return (string)$value;
    }
    else
    {
        $this->error("Invalid value");
    }
}
Прошу прощения, для float возможны и такие варианты:
PHP:
$v = log(0);
echo "v = $v  " . escapeInt($v) . "\n";
 
Сверху