Использование параметризованных запросов - хороший способ выполнить задачу, чтобы избежать и предотвратить внедрение в клиентскую библиотеку БД. Он выполнит экранирование до того, как заменит строку на «?». Это делается в клиентской библиотеке перед сервером БД.
Если у вас запущен MySQL, включите журнал SQL и попробуйте выполнить несколько параметризованных запросов, и вы увидите, что сервер MySQL получает полностью замещенные запросы без "?" в нем, но клиентская библиотека MySQL уже избежала любых кавычек в вашем «параметре» для вас.
Если вы используете метод B только с заменой строки, "s не будут автоматически экранированы.
Синергетически, с MySQL, вы можете заранее подготовить параметризованный запрос, а затем несколько раз использовать подготовленный оператор. Когда вы готовите запрос, MySQL анализирует его и возвращает вам подготовленное утверждение - некоторое разбранное представление MySQL понимает. Каждый раз, когда вы используете подготовленный оператор, вы не только защищаетесь от внедрения, но и избегаете затрат на повторный анализ запроса.
И, если вы действительно хотите быть в безопасности, вы можете изменить уровень доступа к БД / ORM таким образом, чтобы 1) код веб-сервера мог использовать только подготовленные операторы, и 2) вы можете только подготовить операторы до запуска веб-сервера. Затем, даже если ваше веб-приложение взломано (скажем, с помощью эксплойта переполнения буфера), хакер может по-прежнему использовать только подготовленные операторы, но не более того. Для этого вам нужно посадить в тюрьму ваше веб-приложение и разрешить доступ к базе данных только через слой доступа к БД / ORM.