|
|
|
| Здравствуйте.
Нужна ваша помощь.
есть стринг:
$str = "+1";
После работы mysql_real_escape_string() $str = "1", т.е. плюс куда-то пропадает.
Причём, пропадает он только если этот "+" стоит самым первым символом в переменной, в других случаях не пропадает.
Кодировка 1251.
Как поступить в этом случае, чтобы плюс никуда не исчезал, и в тоже время не пострадала безопасность.
Надеюсь на вашу помощь, ибо сам что-то уже ничего умного придумать не могу. | |
|
|
|
|
|
|
|
для: Ninjak
(10.11.2011 в 01:18)
| | Полный код покажите. | |
|
|
|
|
|
|
|
для: Саня
(10.11.2011 в 01:26)
| | function sqlesc($value) {
if (!is_numeric($value)) {
$value = "'" . mysql_real_escape_string($value) . "'";
}
return $value;
}
$text = "+1";
$query = "INSERT INTO table WHERE text = ".sqlesc($text)."";
mysql_query($query);
если взять gettype(sqlesc($text)); — то вернёт стринг
а если написать
print $query, то строка выглядит так:
INSERT INTO table WHERE text = +1; — типа уже не строка, а инт | |
|
|
|
|
|
|
|
для: Ninjak
(10.11.2011 в 01:44)
| | Для строки "+.123e-12" is_numeric() тоже выдаст true. Вполне корректное описание числа в экспоненциальной форме. Для любого валидного числа is_numeric() будет выдавать true. "0x920adf" — тоже валидное число в шестнадцатиричной форме.
is_numeric() проверяет числа, а не типы переменных. Если хотите проверять только цифры (то есть чтобы строка состояла только из цифр от 0 до 9), то применяйте ctype_digit() или preg_match('!^\d+$!', ...);
Плюс в mysql пропадает по тем же самым причинам. +1 без кавычек в запросе — обычное число. "+" отбрасывается, так как "1" и "+1" в числовом контексте — одно и то же, поэтому "+" отбрасывается за ненадобностью. И уже после этого число 1 преобразуется в строку "1" и записывается в строковое поле.
Это поведение легко проверить запросом "SELECT +1, 1, '+1';" и PHP-кодом "print +1;" | |
|
|
|
|
|
|
|
для: Саня
(10.11.2011 в 02:16)
| | Спасибо. | |
|
|
|