Используйте параметризованные запросы (или хранимые процедуры) и избегайте динамического SQL, как чума.
Я предлагаю использовать встроенные библиотечные функции вместо того, чтобы пытаться написать собственный код для предотвращения инъекций.
Наивная реализация удаляет ;
, даже если она должна использоваться (скажем, как часть переданного параметра VARCHAR или CHAR, где это допустимо). В конечном итоге вам придется написать собственный синтаксический анализатор SQL, чтобы принимать / отклонять запросы.
Вы можете прочитать здесь подробнее о динамическом SQL и проблемах, которые он представляет (и решает).