Вы правы, настоящие подготовленные операторы должны поддерживаться сервером. Реальное готовое средство запрашивает базу данных в два этапа.
Первый шаг состоит в отправке шаблона запроса, который сервер может предварительно скомпилировать. Механизм базы данных также заранее подготовляет план выполнения (в основном, какие индексы будут использоваться для обслуживания реального запроса).
Второй шаг - предоставить фактические значения заполнителям и выполнить фактический запрос с этими параметрами.
Обычно это позволяет ускорить выполнение нескольких похожих запросов, поскольку 1. запрос уже был предварительно скомпилирован (план выполнения уже вычислен) и 2. после этого будут отправлены только значения параметров.
Эмулируемый запрос - это просто синтаксический сахар, который позволяет упростить отправку (не более быстрое выполнение) нескольких последовательных похожих запросов. Полные инструкции SQL отправляются на сервер каждый раз, когда выполняется эмулированный запрос.
Когда сервер не поддерживает реальные подготовленные операторы, рекомендуется использовать эмулированные подготовленные операторы, поскольку драйвер по-прежнему заботится об экранировании значений для вас, что делает SQL-инъекцию менее вероятной.
Не называйте это «обычно быстрее». Разница может быть едва заметной для многих типов запросов. Не говоря уже о том, что во многих приложениях у вас просто нет возможности запустить его дважды. –
Итак, в случае реальных подготовленных утверждений мы гарантированы от инъекций, в то время как в случае эмулированных функций, которые мы используем, будут стараться изо всех сил защищать символы безопасно, так ли это? – GionJh
@ user986437 в случае эмулируемых мы также гарантируем –