mirror of
https://github.com/php/doc-es.git
synced 2026-04-25 16:18:09 +02:00
af7a36315e
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@336674 c90b9560-bf6c-de11-be94-00142212c4b1
495 lines
15 KiB
XML
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>Sí</entry>
|
|
<entry>Sí</entry>
|
|
<entry>Sí</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>Sí</entry>
|
|
<entry>No</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Soporte para juegos de caracteres</entry>
|
|
<entry>Sí</entry>
|
|
<entry>Sí</entry>
|
|
<entry>No</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Soporte para Declaraciones Preparadas en el lado del servidor</entry>
|
|
<entry>Sí</entry>
|
|
<entry>Sí</entry>
|
|
<entry>No</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Soporte para Declaraciones Preparadas en el lado del cliente</entry>
|
|
<entry>No</entry>
|
|
<entry>Sí</entry>
|
|
<entry>No</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Soporte para Procedimientos Almacenados</entry>
|
|
<entry>Sí</entry>
|
|
<entry>Sí</entry>
|
|
<entry>No</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Soporte para Declaraciones Múltiples</entry>
|
|
<entry>Sí</entry>
|
|
<entry>Mayormente</entry>
|
|
<entry>No</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Soporte para todas las funcionalidades de MySQL 4.1+</entry>
|
|
<entry>Sí</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>
|