1
0
mirror of https://github.com/php/doc-es.git synced 2026-04-25 16:18:09 +02:00
Files
archived-doc-es/reference/mysqli/overview.xml
T
Pedro Antonio Gil Rodríguez af7a36315e Correcciones menores de otros usuarios
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@336674 c90b9560-bf6c-de11-be94-00142212c4b1
2015-04-27 15:04:25 +00:00

495 lines
15 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: cd09fab47b40563cb8b2316d817efc973d991713 Maintainer: seros Status: ready -->
<!-- Reviewed: no -->
<chapter xml:id="mysqli.overview" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Información general</title>
<para>
Esta sección proporciona una introducción de las opciones disponibles
a la hora de desarrollar una aplicación PHP que necesite interactuar
con una base de datos MySQL.
</para>
<para>
<emphasis role="bold">¿Qué es una API?</emphasis>
</para>
<para>
Una Interfaz de Programación de Aplicaciones, o API, define las clases,
métodos, funciones y variables que necesitará llamar una aplicación para
llevar a cabo una tarea determinada. En el caso de las aplicaciones
de PHP que necesitan comunicarse con un servidor de bases de datos, las APIs
necesarias se ofrecen generalmente en forma de extensiones de PHP.
</para>
<para>
Las APIs pueden ser procedimentales u orientadas a objetos. Con una API procedimental
invocan funciones para llevar a cabo las tareas, mientras con con una API orientada a
objetos se instancian clases, y entonces se invocan a métodos de los objetos creados.
Entre ambas opciones, la segunda es generalmente la vía recomendada, puesto que está
más actualizada y conlleva una mejor organización de código.
</para>
<para>
Cuando se escriben aplicaciones PHP que necesitan conectar a
un servidor MySQL, existen varias opciones disponibles respecto a API.
Este documento abarca esas opciones, y ayuda a elegir la mejor
solución para cada aplicación.
</para>
<para>
<emphasis role="bold">¿Qué es un Conector?</emphasis>
</para>
<para>
En la documentación de MySQL, el término <emphasis>conector</emphasis>
hace referencia al software que permite a una aplicación
conectarse a un servidor de bases de datos MySQL. MySQL proporciona
conectores para ciertos lenguajes, entre ellos PHP.
</para>
<para>
Si una aplicación de PHP necesita comunicarse con un servidor de bases de datos,
necesitará escribir el código PHP que realice tareas tales como
conectar al servidor de bases de datos, realizar consultas y otras
funciones relacionadas con bases de datos. Es necesario tener un software instalado
en el sistema que proporcione a la aplicación en PHP la API, que manejará la
comunicación entre el servidor de bases de datos y la aplicación,
posiblemente empleando en caso necesario otras bibliotecas. A este software
generalmente se le conoce como conector, dado que permite a una
aplicación <emphasis>conectar</emphasis> con un servidor de bases de datos.
</para>
<para>
<emphasis role="bold">¿Qué es un Driver?</emphasis>
</para>
<para>
Un driver es un software diseñado para comunicarse con un
tipo específico de servidor de bases de datos. Podría también invocar a una
biblioteca, como por ejemplo la Biblioteca Cliente de MySQL o el Driver Nativo de
MySQL. Estas bibliotecas implementan el protocolo de bajo nivel que se utiliza para
comunicarse con el servidor de bases de datos.
</para>
<para>
A modo de ejemplo, la capa de abstracción de bases de datos
<link linkend="mysqli.overview.pdo">Objetos de Datos de PHP (PDO)</link>
utilizará alguno de los drivers para bases de datos disponibles.
Uno de ellos es el driver PDO MYSQL, que permite comunicarse con
un servidor MySQL.
</para>
<para>
A menudo la gente utiliza los términos conector y driver indistintamente.
Esto puede dar lugar a confusión. En la documentación de MySQL, el término
<quote>driver</quote> queda reservado para el software que proporciona
la parte específica de una base de datos dentro de un conector.
</para>
<para>
<emphasis role="bold">¿Qué es una Extensión?</emphasis>
</para>
<para>
En la documentación de PHP aparece otro término -
<emphasis>extensión</emphasis>. El código fuente de PHP consiste
por un lado de un núcleo, y por otro de extensiones opcionales
para el núcleo. Las extensiones de PHP relacionadas con MySQL,
tales como <literal>mysqli</literal>, y
<literal>mysql</literal>, están implementadas utilizando
el framework de extensiones de PHP.
</para>
<para>
Típicamente, una extensión ofrece una API al programador de PHP para
permitirle hacer uso de sus utilidades mediante código. Sin embargo, algunas
de las extensiones que utilizan el framework de extensiones de PHP no ofrecen
ninguna API al programador.
</para>
<para>
La extensión del driver PDO MySQL, por ejemplo, no proporciona ninguna
API al programador PHP, pero en su lugar ofrece una interfaz a la
capa de PDO que tiene por encima.
</para>
<para>
No deben confundirse los términos API y extensión, dado que una
extensión no debe necesariamente proporcionar una API al programador.
</para>
<para>
<emphasis role="bold">¿Cuáles son las principales APIs que PHP ofrece
para utilizar MySQL?</emphasis>
</para>
<para>
Hay tres APIs principales a la hora de considerar conectar a un
servidor de bases de datos MySQL:
</para>
<itemizedlist>
<listitem>
<para>
Extensión MySQL de PHP
</para>
</listitem>
<listitem>
<para>
Extensión mysqli de PHP
</para>
</listitem>
<listitem>
<para>
Objetos de Datos de PHP (PDO)
</para>
</listitem>
</itemizedlist>
<para>
Cada una tiene sus ventajas e inconvenientes. El siguiente
apartado trata de dar una breve introducción a los aspectos clave
de cada API.
</para>
<para>
<emphasis role="bold">¿Qué es la Extensión MySQL de PHP?</emphasis>
</para>
<para>
Esta es la extensión original diseñada que permite desarrollar aplicaciones
PHP que interactúan con bases de datos MySQL. La extensión
<literal>mysql</literal> proporciona una interfaz procedural,
y está pensada para usar sólo con versiones de MySQL anteriores a la 4.1.3.
Si bien esta extensión se puede utilizar con versiones de MySQL 4.1.3 o posteriores,
no estarán disponibles todas las nuevas funcionalidades del servidor MySQL.
</para>
<note>
<para>
Si se utiliza una versión de MySQL 4.1.3 o posterior, se recomienda
<emphasis>encarecidamente</emphasis> utilizar la extensión
<literal>mysqli</literal> en su lugar.
</para>
</note>
<para>
El código fuente de la extensión <literal>mysql</literal> se encuentra
en el directorio de extensiones de PHP <filename>ext/mysql</filename>.
</para>
<para>
Para más información sobre la extensión<literal>mysql</literal>,
revise <xref linkend="book.mysql"/>.
</para>
<para>
<emphasis role="bold">¿Qué es la extensión mysqli de PHP?</emphasis>
</para>
<para>
La extensión <literal>mysqli</literal>, o como a veces se le conoce,
la extensión de MySQL <emphasis>mejorada</emphasis>, se desarrolló
para aprovechar las nuevas funcionalidades encontradas en los sistemas
MySQL con versión 4.1.3 o posterior. La extensión <literal>mysqli</literal>
viene incluida en las versiones PHP 5 y posteriores.
</para>
<para>
La extensión <literal>mysqli</literal> contiene numerosos beneficios,
siendo estas las mejoras principales respecto a la extensión
<literal>mysql</literal>:
<itemizedlist>
<listitem>
<para>
Interfaz orientada a objetos
</para>
</listitem>
<listitem>
<para>
Soporte para Declaraciones Preparadas
</para>
</listitem>
<listitem>
<para>
Soporte para Múltiples Declaraciones
</para>
</listitem>
<listitem>
<para>
Soporte para Transacciones
</para>
</listitem>
<listitem>
<para>
Mejoradas las opciones de depuración
</para>
</listitem>
<listitem>
<para>
Soporte para servidor empotrado
</para>
</listitem>
</itemizedlist>
</para>
<note>
<para>
Si utiliza MySQL versión 4.1.3 o superior, se recomienda
<emphasis>encarecidamente</emphasis> utilizar esta
extensión.
</para>
</note>
<para>
Además de la interfaz orientada a objetos, esta extensión también
proporciona una interfaz procedural.
</para>
<para>
La extensión <literal>mysqli</literal> está desarrollada mediante el
framework de extensiones de PHP. Su código fuente se ubica en el
directorio <filename>ext/mysqli</filename>.
</para>
<para>
Para más información sobre la extensión <literal>mysqli</literal>,
revise <xref linkend="book.mysqli"/>.
</para>
<para xml:id="mysqli.overview.pdo">
<emphasis role="bold">¿Qué es PDO?</emphasis>
</para>
<para>
Los Objetos de Datos de PHP, o PDO, son una capa de abstracción de
bases de datos específicas para aplicaciones PHP. PDO ofrece una API
homogénea para las aplicaciones PHP, independientemente del tipo de
servidor de bases de datos con el que se vaya a conectar la aplicación.
En teoría, si se utiliza la API PDO, se podría cambiar el servidor
de bases de datos en uso, por ejemplo de Firebird a MySQL, y sólo
se necesitarían algunos cambios menores en el código PHP.
</para>
<para>
Otros ejemplos de capas de abstracción de bases de datos son JDBC para
aplicaciones Java o DBI para Perl.
</para>
<para>
A pesar de que PDO tiene sus ventajas, tales como una API limpia,
sencilla y portable, su mayor inconveniente es que no permite utilizar
todas las funcionalidades avanzadas en la última versión del servidor
MySQL. Por ejemplo, PDO no permite hacer uso de las Declaraciones
Múltiples de MySQL.
</para>
<para>
PDO está desarrollado utilizando el framework de extensiones de PHP.
Su código fuente se ubica en el directorio <filename>ext/pdo</filename>.
</para>
<para>
Para más información de PDO, revise
<xref linkend="book.pdo"/>.
</para>
<para>
<emphasis role="bold">¿Qué es el driver PDO MYSQL?</emphasis>
</para>
<para>
El driver PDO MYSQL no es una API en sí, al menos desde el punto de
vista del programador de PHP. En realidad, el driver PDO MYSQL
se encuentra una capa por debajo del propio PDO, y ofrece funcionalidades
específicas de MySQL. Si bien el programador realiza las llamadas a la
API de PDO, PDO utiliza el driver PDO MYSQL para llevara a cabo
la comunicación con el servidor MySQL.
</para>
<para>
El driver PDO MYSQL es uno de los muchos drivers PDO disponibles. Otros
de los drivers disponibles son los de los servidores de bases de datos
Firebird y PostgreSQL.
</para>
<para>
El driver MYSQL PDO está desarrollado utilizando el framework de extensiones
de PHP. Su código fuente está ubicado en el directorio
<filename>ext/pdo_mysql</filename>. No ofrece ninguna API al programador PHP.
</para>
<para>
Para más información sobre el driver PDO MYSQL, revise
<xref linkend="ref.pdo-mysql"/>.
</para>
<para xml:id="mysqli.overview.mysqlnd">
<emphasis role="bold">¿Qué es el Driver Nativo de MySQL?</emphasis>
</para>
<para>
Tanto la extensión <literal>mysql</literal>, como
<literal>mysqli</literal>, y el driver PDO MYSQL,
utilizan para llevar a cabo las comunicaciones con el servidor de bases de
datos MySQL una biblioteca de bajo nivel que genera el protocolo
necesario. Hace un tiempo, la única biblioteca disponible
era <literal>libmysqlclient</literal>.
</para>
<para>
Sin embargo, la interfaz que ofrece <literal>libmysqlclient</literal> no estaba
optimizada para comunicarse con aplicaciones PHP, dado que
<literal>libmysqlclient</literal> se desarrolló originalmente teniendo en mente
aplicaciónes hechas en C. Por esta razón, se desarrolló el Driver Nativo de MySQL,
<literal>mysqlnd</literal>, como una alternativa a
<literal>libmysqlclient</literal> para las aplicaciones en PHP.
</para>
<para>
Tanto la extensión <literal>mysql</literal>, como la extensión
<literal>mysqli</literal> y el driver PDO MySQL, se pueden
configurar por separado para utilizar o bien
<literal>libmysqlclient</literal> o bien <literal>mysqlnd</literal>.
Dado que <literal>mysqlnd</literal> fue desarrollado específicamente
para ser utilizado en sistemas PHP, tiene numerosas mejoras en cuanto
a uso de memoria y velocidad respecto a <literal>libmysqlclient</literal>.
Se recomienda encarecidamente hacer uso de dichas mejoras.
</para>
<note>
<para>
El Controlador Nativo de MySQL sólo puede usarse con servidores
de MySQL versiones 4.1.3 y posteriores.
</para>
</note>
<para>
El Driver Nativo de MySQL está desarrollado utilizando el framework
de extensiones de PHP. El código fuente se ubica en
<filename>ext/mysqlnd</filename>. No ofrece ninguna API al programador
de PHP.
</para>
<!-- TODO
<para>
For further information on the MySQL Native Driver, see
<xref linkend="book.mysqlnd"/>.
</para>
-->
<para>
<emphasis role="bold">Comparación de Funcionalidades</emphasis>
</para>
<para>
La siguiente tabla compara las funcionalidades de los tres
principales métodos para conectar a MySQL desde PHP:
</para>
<table>
<title>Comparación de las opciones de la API de MySQL para PHP</title>
<tgroup cols="4">
<colspec colwidth="25*"/>
<colspec colwidth="25*"/>
<colspec colwidth="25*"/>
<colspec colwidth="25*"/>
<thead>
<row>
<entry></entry>
<entry>Extensión mysqli de PHP</entry>
<entry>PDO (Usando el driver PDO MySQL y el Driver Nativo MySQL)</entry>
<entry>Extensión MySQL de PHP</entry>
</row>
</thead>
<tbody>
<row>
<entry>Versión de PHP en que se introdujo</entry>
<entry>5.0</entry>
<entry>5.0</entry>
<entry>Antes de 3.0</entry>
</row>
<row>
<entry>Incluído con PHP 5.x</entry>
<entry></entry>
<entry></entry>
<entry></entry>
</row>
<row>
<entry>Estado de desarrollo de MySQL</entry>
<entry>Desarrollo activo</entry>
<entry>Desarrollo activo, desde PHP 5.3</entry>
<entry>Sólo se le mantiene</entry>
</row>
<row>
<entry>Recomendado por MySQL para nuevos proyectos</entry>
<entry>Sí - opción recomendada</entry>
<entry></entry>
<entry>No</entry>
</row>
<row>
<entry>Soporte para juegos de caracteres</entry>
<entry></entry>
<entry></entry>
<entry>No</entry>
</row>
<row>
<entry>Soporte para Declaraciones Preparadas en el lado del servidor</entry>
<entry></entry>
<entry></entry>
<entry>No</entry>
</row>
<row>
<entry>Soporte para Declaraciones Preparadas en el lado del cliente</entry>
<entry>No</entry>
<entry></entry>
<entry>No</entry>
</row>
<row>
<entry>Soporte para Procedimientos Almacenados</entry>
<entry></entry>
<entry></entry>
<entry>No</entry>
</row>
<row>
<entry>Soporte para Declaraciones Múltiples</entry>
<entry></entry>
<entry>Mayormente</entry>
<entry>No</entry>
</row>
<row>
<entry>Soporte para todas las funcionalidades de MySQL 4.1+</entry>
<entry></entry>
<entry>Mayormente</entry>
<entry>No</entry>
</row>
</tbody>
</tgroup>
</table>
<!--
<para>
<emphasis role="bold">Further information</emphasis>
</para>
<para>
The PHP distribution and documentation are available from the
<link xlink:href="http://www.php.net/">PHP Web site</link>.
</para>
-->
</chapter>