Я использую PHP 5 и MySQL 5 на выделенном сервере (Ubuntu Server 8.10) с полным доступом к корневому каталогу. Я очищаю некоторый код LAMP, который я унаследовал, и у меня есть большое количество SQL-запросов с этим типом конструкции:
SELECT ... FROM table WHERE
LCASE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
strSomeField, ' ', '-'), ',', ''), '/', '-'), '&', ''), '+', '')
) = $somevalue
Игнорирование того факта, что база данных никогда не должна была быть построена так, чтобы сначала требовать такого выбора, а поле $ somevalue необходимо будет параметризовать, чтобы закрыть дыру в безопасности, что является моим лучшим вариантом для исправления WHERE состояние во что-то менее оскорбительное? Если бы я использовал MSSQL или Oracle, я бы просто собрал пользовательскую функцию, но мой опыт работы с MySQL более ограничен, и я раньше не создавал UDF с ним, хотя я доволен кодированием C.
Обновление: Для всех тех, кто уже поднял брови на это в исходном коде, $ somevalue на самом деле что-то вроде $ GET ['product'] & mdash; есть несколько вариантов тема. В этом случае select извлекает продукт из базы данных по имени продукта - после удаления символов, чтобы он соответствовал тому, что можно было ранее передать в качестве параметра URI.