2012-04-13 19 views
21

Intentando aprender algo nuevo, específicamente tratando de elegir si utilizar MySQLi o PDO para proyectos futuros cuando se trabaja con MySQL - Me encontré con this page que muestra una descripción general de las opciones disponibles para mí.¿Qué son las declaraciones preparadas por el cliente?

En la parte inferior de esta página hay una tabla que compara la funcionalidad de los tres métodos principales de comunicación con mysql. En la fila "API admite Declaraciones preparadas del lado cliente", dice que PDO admite esto y MySQLi no.

Sé lo que son declaraciones preparadas. La respuesta al this question es un ejemplo simple de lo que creo que son declaraciones preparadas del lado del servidor. Y PHP es un lenguaje del lado del servidor, lo que a su vez debería significar que no importa si las declaraciones preparadas del lado del cliente están disponibles o no. Pero eso me hace preguntarme por qué incluso eso está incluido en el manual de PHP.

¿Qué son las afirmaciones preparadas por el cliente?

+3

Supongo que esto utiliza el cliente/servidor en un contexto diferente que el modelo web, es decir, MySQL es el servidor y PHP es el cliente en este contexto. A pesar de que ambos están en la misma computadora. –

+2

Lo más seguro es que se refiere a ['PDO :: ATTR_EMULATE_PREPARES'] (http://www.php.net/manual/en/pdo.setattribute.php), una configuración que simula instrucciones preparadas con interpolación y escape. Esto se hace en la biblioteca, por lo que técnicamente es del lado del cliente, antes de que las solicitudes se transfieran al servidor de BD. – mario

+0

@MattFenwick Aunque esto podría tener perfecto sentido, esto no explica por qué la misma tabla muestra soporte para las declaraciones preparadas del lado del servidor como para todas las bibliotecas, pero solo una de ellas admite el lado del cliente si aceptamos la premisa de que PHP es el cliente. – Repox

Respuesta

28

Obviamente, las declaraciones preparadas del lado del cliente son declaraciones preparadas por el cliente, en lugar del servidor.

PDO es una capa de abstracción de acceso a datos que admite múltiples interfaces DBMS (controladores), algunas de las cuales admiten instrucciones preparadas del lado del servidor (p. Ej .: MySQL 4.1+), algunas de las cuales no (p. Ej .: MySQL 3) .

En el caso en el que el driver PDO no soporta comandos preparados en el servidor, PDO emular a ellos en el lado del cliente y utilizar la interfaz de consulta genérica para ejecutarlas.

La razón por la cual MySQLi no los admite es simple: MySQLi es una extensión específica de MySQL, un RDBMS que de hecho admite declaraciones preparadas del lado del servidor, por lo que no hay ninguna razón para emularlas.

13

Como se dijo en los comentarios, en este caso "cliente" se refiere a PHP y "servidor" a MySQL. PDO admite bases de datos distintas de MySQL. No todas estas bases de datos/controladores db soportan las declaraciones preparadas de forma nativa, y en esos casos, PDO emulará estas declaraciones por sí mismo. MySQLi no lo hará (no estoy seguro de cuándo tendría que hacerlo, ¿tal vez cuando se trata de un viejo controlador MySQL?).

Un factor más es posible que desee considerar: ciertos marcos PHP requieren PDO y no son compatibles con mysqli.

2

Con PDO, puede utilizar sentencias preparadas (en código) si la base de datos a la que se está conectando con PDO las admite o no.

Si el servidor maneja las declaraciones preparadas, entonces PDO permitirá que el servidor las maneje (en el lado del servidor). Si no, entonces PDO simplemente emula las declaraciones preparadas dentro de PDO (lado del cliente), pero termina teniendo que enviar cada consulta al servidor.

Cuestiones relacionadas