Правильное экранирование полей и параметров запроса при использовании PDO

Возможный дубликат:
Как использовать подготовленный оператор pdo для порядка и ограничений?

Я использую PDO, поскольку это было рекомендовано как способ, когда дело доходит до соединений с базой данных PHP. Но в то же время я одержим защитой своих запросов, чтобы убедиться, что моя система максимально безопасна для хакеров.

PDO и подготовленные заявления – отличный способ, но у меня есть пара проблем с ним. У меня есть настраиваемая система фильтрации, которая требует, чтобы я вручную создавал запрос. Например, это:

$query=$pdo->prepare('SELECT * FROM log WHERE username=?'); $result=$query->execute(array($_GET['username'])); 

Это работает, и все отлично – PDO имеет дело с тем, чтобы переменная $ _GET не навредила моему запросу.

Но что делать, когда мне нужно избегать других вещей? Например, если у меня есть такая ситуация, когда я хочу вернуть всего пять записей:

 $query=$pdo->prepare('SELECT * FROM log WHERE username=? LIMIT 5'); $result=$query->execute(array($_GET['username'])); 

Это, опять же, работает. Но что, если предельные значения также поступают из $ _GET? Как избежать этого?

Для этого я сначала понял, что мне нужно построить запрос вручную и использовать метод PDO :: quote (), например:

 $query='SELECT * FROM log WHERE username=? LIMIT '.$pdo->quote($_GET['limit']); 

Но это не сработало, поскольку оно помещало кавычки вокруг ограничителя, который прерывает запрос.

Есть ли способ избежать использования PDO способом mysql_real_escape_string ()? Поскольку последние никогда не ставят кавычки вокруг результирующей переменной, но я не могу остановить это поведение с помощью quote ().

Альтернативой было бы создание моего собственного escaper, но этот вид побеждает цель использования подготовленных инструкций PDO для начала (сами подготовленные заявления всегда ставят кавычки вокруг значений).

EDIT: Я также попробовал отличить значение как целое в цитате, например:

 $pdo->quote((int)$value,PDO::PARAM_INT); 

Но это все-таки котировки вокруг. То же самое с intval ().

Почему PDO так активно предлагается и рекомендуется для использования, если мне приходится делать даже примитивные вещи, подобные этому обычаю? Я действительно не хочу писать метод дезинфекции для подобных случаев и надеюсь, что ничего не сломается или не скомпрометировано.

Related of "Правильное экранирование полей и параметров запроса при использовании PDO"