Несколько раз, когда я сталкивался с этой проблемой, мне удавалось переписать запрос, используя подвыборы и / или объединения таблиц. Я предлагаю попробовать переписать запрос таким образом, чтобы избежать параметра max.
Если перезапись невозможна (например, все несколько параметров получены из внешнего источника), вам нужно будет проверить данные самостоятельно. Я использовал следующее регулярное выражение для безопасной проверки:
<cfif ReFindNoCase("[^a-z0-9_\ \,\.]",arguments.InputText) IS NOT 0>
<cfthrow type="Application" message="Invalid characters detected">
</cfif>
Код вызовет ошибку, если в текстовой строке будет обнаружен какой-либо специальный символ, кроме запятой, подчеркивания или точки. (Возможно, вы захотите разобраться с ситуацией, а не просто сгенерировать ошибку.) Я предлагаю вам изменить это по мере необходимости на основе ожидаемых или разрешенных значений в проверяемых вами полях. Если вы проверяете строку с целыми числами, разделенными запятыми, вы можете переключиться на использование более ограничивающего регулярного выражения, например "[^0-9\ \,]"
, которое будет разрешать только цифры, запятые и пробелы.
Этот ответ не ускользнет от персонажей, он не допустит их в первую очередь. Он должен использоваться для любых данных, которые вы не будете использовать с <cfqueryparam>
. Лично я нашел в этом необходимость, только когда использовал поле динамической сортировки; не все базы данных позволят вам использовать переменные связывания с предложением ORDER BY
.