Tiene razón, las declaraciones preparadas reales deben ser compatibles con el servidor. Un preparado real significa consultar la base de datos en dos pasos.
El primer paso consiste en enviar una plantilla de consulta, que el servidor puede precompilar. El motor de la base de datos también prepara por adelantado el plan de ejecución (principalmente, qué índices se utilizarán para atender la consulta real).
El segundo paso es dar valores reales a los marcadores de posición y ejecutar la consulta real con estos parámetros.
Esto normalmente permite una ejecución más rápida de varias consultas similares, porque 1. la consulta ya se compiló previamente (el plan de ejecución ya se calculó) y 2. solo los valores de los parámetros se envían posteriormente.
Una consulta emulada es solo un azúcar sintáctico, que solo permite un envío más fácil (no una ejecución más rápida) de varias consultas similares sucesivas. Las instrucciones SQL completas se envían al servidor cada vez que se ejecuta una consulta emulada.
Cuando el servidor no es compatible con sentencias preparadas reales, aún se recomienda usar sentencias preparadas emuladas, porque el controlador aún se encarga de escapar los valores por usted, lo que hace que la inyección SQL sea menos probable.