2012-04-07 2 views
0

Вот код:Как добавить mysql_real_escape_string(): к этому?

//check if the starting row variable was passed in the URL or not 
    if (!isset($_GET['pg']) or !is_numeric($_GET['pg'])) { 
//we give the value of the starting row to 0 because nothing was found in URL 
    $startrow = 0; 
//otherwise we take the value from the URL 
} else { 
$startrow = (int)mysql_real_escape_string($_GET['pg']); 
} 

Всякий раз, когда я пытаюсь добавить mysql_real_escape_string(); к $ _GET ['pg') в! isset, код не выполняется, и я не получаю сообщение об ошибке.

+0

Попробуйте удалить '(int)' в начале 'mysql ...' ... Может случиться так, что –

+0

Зачем вы вытаскиваете результат 'mysql_real_escape_string' (строка) в' int'? –

+0

Или, чтобы задать вопрос, почему вы используете 'mysql_real_escape_string' здесь? –

ответ

2

Не набрасывайте значение pg на int. Вместо этого убедитесь, что он содержит целочисленное значение или не выполняет запрос. Если вы не планировали выполнение запроса (который мы не видим), то mysql_real_escape_string() является совершенно неправильным инструментом, так как ему требуется соединение.

Соответствующая вещь - проверить, что содержимое $_GET['pg'] является целым числом, а не с ним.

С is_numeric() вернет TRUE для нецелочисленных действительных чисел, я склонен использовать ctype_digit() для проверки положительных целых чисел. Если вам нужна возможность отрицательных целых чисел, а также, вы можете использовать ctype_digit(abs($_GET['pg']))

if (!isset($_GET['pg']) or !ctype_digit($_GET['pg'])) { 
    // it wasn't an integer 
    // initialize to your default value 
} 
else { 
    // $_GET['pg'] *has to be a valid int* or we wouldn't have entered the else block 
    // no need to escape or further process it - it's safe to use 
} 
+0

Если я использую ctype_digit, он будет использовать только номера? Например, если кто-то набрал «drop table» или ссылку на что-то в значении $ get, запрос сломается или просто не будет выполняться, так как он ожидает только числового значения! – AAA

+0

@AAA Если кто-то вошел в то, что не было положительным целым числом, код введет случай 'if' выше и сделает все, что вы там определили, чтобы обработать его, нужно ли инициализировать значение по умолчанию или перенаправить на другую страницу или без разницы. –

+0

@AAA Идея состоит в том, чтобы проверить, что значение _is_ целое, а если нет, не переходите к какому-либо запросу. –

0

mysql_real_escape_string требует подключения к базе данных (второй параметр), если это не предусмотрено, последняя открытая связь будет использоваться - смотрите:

http://php.net/manual/en/function.mysql-real-escape-string.php

не правда ли, что в этот момент вашего кода не было создано никакого соединения с базой данных? в этом случае вы должны увидеть предупреждение (проверьте, позволяет ли ваша конфигурация php вызывать предупреждения смещения)

+0

Connection активен, и он работает. Я смог проверить это. благодаря – AAA

1

Вы хотите иметь целочисленное значение, равное 0 или больше; то есть 0, если вход недействителен:

$startrow = max(0, isset($_GET['pg']) ? $_GET['pg'] : 0); 

mysql_real_escape_string() не требуется для целочисленных значений. В зависимости от вашего стиля кодирования это также возможно и в PHP:

$startrow = max(0, @$_GET['pg']); 

Если вы используете PHP 5.4, он работает даже неплохо.

Смежные вопросы