Каждый раз, когда вы читаете ввод от пользователя или любого внешнего источника, вы ВСЕГДА ВСЕГДА должны всегда избегать его, прежде чем пытаться создать из него команду SQL.
Один из способов сделать это - использовать подготовленные операторы илихранимые процедуры и использовать встроенные вызовы функций для установки переменных.Тогда функция позаботится о любом экранировании.
Если вы хотите или вам нужно вручную собрать SQL, напишите функцию для его экранирования.Для большинства механизмов SQL достаточно найти любые встроенные одинарные кавычки и удвоить их, то есть превратить
Пэт О'Хара сказал «Привет»
в
Пэт О'Хара сказал: «Привет»
Некоторые движки SQL имеют другие символы, которые требуют экранирования, как в Postgres, вы также должны удваивать обратную косую черту.
Довольно просто написатьфункция, чтобы сделать это, а затем ВСЕГДА использовать его.
У меня было много разговоров с программистами, где они говорят, что они не беспокоятся в этом случае, потому что они не думали, что кто-то когда-либо будет входитьцитата в этой конкретной области.Но обычно причина нашего разговора в том, что кто-то это сделал.Не анализируй это!Просто сделай это!Это как носить ремень безопасности.Вы могли бы сидеть там и вычислять шансы, которые вы получите в аварии в этой конкретной поездке, но почему?Мудрый водитель делает это бессмысленным автоматическим действием, чтобы всегда просто пристегнуть ремень безопасности, даже если все, что он делает, это перемещает автомобиль с дороги на улицу.Мудрый программист базы данных всегда избегает входных строк, потому что вы никогда не знаете.