Наверняка многие использую функцию 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))» решает это проблему. Да и с точки зрения логики использование правил белого списка гораздо предпочтительнее, чем чёрные списки.