Наверняка многие использую функцию PHP is_numeric() чтобы определить нужно ли экранировать значение кавычками или нет перед вставкой в MySQL или SQLite базу данных. Но это в корне не верно, если в качестве значения передать «0×000001». С точки зрения PHP это числовое значение, и алгоритм может повести себя непредсказуемым образом!

Итак, разберём на примере. Допустим на такой функции:

function q($value, $e = «‘») {
if(is_array($value))
return array_map(array($this, ‘q’), $value);

if(!is_numeric($value))
$value = $e.sqlite_escape_string($value).$e;

return $value;
}

В этой функции если пришло не числовое значение — оно экранируется и обрамляется кавычками. Но значение «0×000001» и ему подобные PHP воспринимает как числовые, а SQLite (в MySQL не проверял) воспринимают их как строковые и требуют обкавычкивания! Замена «if(!is_numeric($value))» на «if(is_string($value))» решает это проблему. Да и с точки зрения логики использование правил белого списка гораздо предпочтительнее, чем чёрные списки.

Опубликовано 03.10.2011в 18:43. В рубриках: PHP. Вы можете следить за ответами к этой записи через RSS 2.0. Вы можете оставить свой отзыв или трекбек со своего сайта.

Оставьте отзыв

Это не спам.
сделано dimoning.ru