stmt statement sentencias prepared preparadas bind_param php mysql pdo mysqli prepared-statement

php - statement - ¿Qué son las declaraciones preparadas por el cliente?



sentencias preparadas php mysqli (3)

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 que quizás desee considerar: ciertos marcos PHP requieren PDO y no son compatibles con mysqli.

Tratando de aprender algo nuevo, específicamente tratando de elegir si usar MySQLi o PDO para futuros proyectos cuando trabajo con MySQL, me encontré con esta página que muestra una descripción general de las opciones disponibles para mí.

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 del cliente ", dice que PDO admite esto y MySQLi no.

Sé lo que son declaraciones preparadas. La respuesta a esta pregunta es un simple ejemplo de lo que creo que son declaraciones preparadas en el 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.

Entonces, ¿qué son las declaraciones preparadas por el cliente?


Con PDO, puede usar declaraciones 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 (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.


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 declaraciones preparadas del lado del servidor (p. Ej., MySQL 4.1+), algunas de las cuales no (p. Ej .: MySQL 3).

En el caso de que el controlador PDO no admita las declaraciones preparadas del lado del servidor, PDO las emulará en el lado del cliente y usará 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 las declaraciones preparadas del lado del servidor, por lo que no hay ninguna razón para emularlas.