2012-05-16 15 views
10

PDO tiene la opción PDO::ATTR_EMULATE_PREPARES que controla si las declaraciones preparadas deben ser emuladas solo si no son compatibles con el DB o siempre. Sin embargo, no menciona si siempre los emula por defecto o no.¿La PDO siempre usa declaraciones preparadas emuladas de forma predeterminada?

Por lo general, es de suponer que la emulación sólo se utiliza si es necesario, pero ya que es PHP no se puede suponer simplemente porque está en su sano juicio ...

+2

¿Puede decirme qué significa la emulación? ¿Y qué MALO puede ser? – Shubham

+1

No se verificará ningún error durante la llamada '-> prepare()' y PDO necesita escapar de sus parámetros en lugar de transmitirlos por separado a la base de datos. Tampoco se beneficiará de las optimizaciones que la base de datos podría hacer cuando prepare una declaración y la ejecuten muchas veces. – ThiefMaster

Respuesta

14

depende del controlador de base de datos. Son always emulados por defecto para MySql (aunque, por supuesto, puede desactivar la opción manualmente); en Postgres, la configuración predeterminada correcta es detected dynamically.

+1

Esto es confuso. La referencia de su código dice algo diferente a la documentación: _PDO_MYSQL aprovechará el soporte nativo de declaraciones preparado presente en MySQL 4.1 y versiones posteriores. Si está utilizando una versión anterior de las bibliotecas de cliente de mysql, PDO las emulará._ (http://www.php.net/manual/en/ref.pdo-mysql.php) – CodeZombie

+3

@ZombieHunter: si el código dice algo diferente a la documentación, entonces obviamente la documentación (o su interpretación) es incorrecta. En este caso específico, en mi humilde opinión debería decir "** puedo aprovecharlo". Los documentos están mal todo el tiempo (PHP es más frecuente que otros, como es típico ... * suspiro *); He perdido la cuenta de cuántas veces descubrí * directamente mentiras * en la documentación. – Jon

+1

Sabía que puedo confiar más en el código al que hizo referencia que en la documentación, pero no podía creerlo. Eso es realmente un problema, tienes que verificar todo en PHP antes de confiar en él: -/ – CodeZombie

Cuestiones relacionadas