Нет, потому что это на самом деле не работает. Злоумышленник просто добавляет пару знаков доллара к своей попытке инъекции.
Правильный способ справиться с этим - это система, которая использует реальные параметры запроса, так что значения параметров никогда не подставляются непосредственно в строку запроса. Это также, как правило, лучше для производительности, потому что база данных лучше справляется с кэшированием плана выполнения, который вы не заканчиваете динамическим построением строки, что обычно медленно в современных языках.
Отсутствие избыточных конкатенационных операторов также значительно улучшает читабельность кода. Вместо этого:
sql = "SELECT * FROM MyTable WHERE Column1=$$" + somevarialbe + "$$ AND Column2=$$" + OtherVariable";
это просто так:
sql = "SELECT * FROM MyTable wHERE Column1=@Value1 AND Column2=@Value2";
Хмм ... Хорошо, теперь я вижу некоторые ограниченные возможности для этой функции.
Представьте себе систему отслеживания билетов с хранимой процедурой получения открытых билетов. Вы могли бы на самом деле жестко закодировать литерал «open» в предложении where запроса. Не то чтобы это был хороший дизайн & mdash; Статус тикета должен быть в таблице со своим собственным ключом, чтобы вы жестко закодировали ключ, а не текст. Но это сеет семя для чего-то действительного и более сложного.