Introducción
PDO_MYSQL es un controlador que implementa la interfaz
de Objetos de Datos de PHP (PDO)
para permitir el acceso de PHP a bases de datos de MySQL 3.x, 4.x y 5.x.
PDO_MYSQL aprovechará el soporte nativo de sentencias preparadas
presente en MySQL 4.1 y superior. Si se utiliza una versión anterior de las
bibliotecas cliente de MySQL, PDO las emulará.
Advertencia
Algunos tipos de tablas (motores de almacenamiento) de MySQL no admiten transacciones. Cuando
se escribe código de base de datos transaccional usando un tipo de tabla que no soporta
transacciones, MySQL aparentará que se inició una transacción éxito.
Además, cualquier consulta DDL ejecutada consignará implícitamente
cualquier transacción pendiente.
Instalación
Las distribuciones comunes de Unix incluyen versiones binarias de PHP que
se pueden instalar. Aunque estas versiones binarias son típicamente construidas
con soporte para las extensiones de MySQL, podría ser necesario instarlar las
bibliotecas de extensiones en sí utilizando un paquete adicional. Compruebe
el gestor de paquetes que viene con la distribución elegida para su
disponibilidad.
Por ejemplo, en Ubuntu el paquete php5-mysql
instala
las extensiones de PHP ext/mysql, ext/mysqli, y pdo_mysql. En CentOS,
el paquete php-mysql
también instala estas tres
extensiones de PHP.
De forma alternativa, esta extensión la puede compilar uno mismo. Construir PHP desde
la fuente permite especificar las extensiones de MySQL que se quieren usar, así como
elegir la biblioteca cliente para cada extensión.
Al compilar, utilice --with-pdo-mysql[=DIR] para instalar
la extensión PDO MySQL, donde la opción [=DIR]
es la biblioteca base de MySQL. A partir de PHP 5.4, mysqlnd
es la biblioteca predeterminada. Para más detalles sobre la elección de una biblioteca, véase
Elegir una biblioteca de MySQL.
Opcionalmente, --with-mysql-sock[=DIR] establece la ubicación
del puntero del socket de unix de MySQL para todas las extensiones de MySQL, incluyendo PDO_MYSQL. Si
no se especifica, se buscará en las ubicaciones predeterminadas.
Opcionalmente, --with-zlib-dir[=DIR] se utiliza para establecer
la ruta para el prefijo de instalación de libz.
$ ./configure --with-pdo-mysql --with-mysql-sock=/var/mysql/mysql.sock
El soporte para SSL se habilita mediante las constantes de PDO_MySQL apropiadas,
lo cual es equivalente a llamar a la » función mysql_ssl_set() de la API en C de MySQL.
Asimismo, SSL no se puede habilitar con PDO::setAttribute, debido a que la conexión
ya existe. Véase también la documentación de MySQL sobre » conectarse a
MySQL con SSL.
Historial de cambios
Versión |
Descripción |
5.4.0 |
mysqlnd se convirtió en la biblioteca predeterminada de MySQL
al compilar PDO_MYSQL. Anteriormente, libmysqlclient era la biblioteca predeterminada de MySQL.
|
5.4.0 |
Las versiones 4.1 y anteriores de la biblioteca cliente de MySQL ya no tienen soporte.
|
5.3.9 |
Agregado el soporte para SSL con mysqlnd y OpenSSL.
|
5.3.7 |
Agregado el soporte para SSL con libmysqlclient y OpenSSL.
|
Constantes predefinidas
Estas constantes están definidas por
este controlador, y estarán disponibles sólo cuando la extensión haya sido
compilada con PHP, o bien sea cargada dinámicamente en ejecución. Además, estas
constantes específicas del controlador deberían ser utilizadas sólo si está usando este controlador.
Usar atributos específicos del controlador con otro controlador podría resultar en un
comportamiento inesperado. PDO::getAttribute() puede ser empleado para
obtener el atributo PDO::ATTR_DRIVER_NAME
para verificar el
controlador, si el código puede ejecutarse con múltiples controladores.
-
MYSQL_ATTR_USE_BUFFERED_QUERY
(integer)
-
Si este atributo es definido como
true
en
PDOStatement, el controlador de MySQL usará las versiones
de la API de MySQL guardadas en el búfer. Si se está escribiendo código portable,
en su lugar se debería usar PDOStatement::fetchAll().
Ejemplo #1 Forzar consultas para que sean guardadas en el búfer en mysql
<?php
if ($bs->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') {
$sentencia = $bs->prepare('select * from foo',
array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true));
} else {
die("mi aplicación sólo funciona con mysql; debería usar \$sentencia->fetchAll() en su lugar");
}
?>
-
MYSQL_ATTR_LOCAL_INFILE
(integer)
-
Activa LOAD LOCAL INFILE
.
Se ha de tener en cuenta que esta constante se puede usar solamente en el array
driver_options
cuando se construye un nuevo gestor de base de datos.
-
MYSQL_ATTR_INIT_COMMAND
(integer)
-
Comando a ejecutar cuando se conecta al servidor MySQL.
Al reconectar se volverá a ejecutar automáticamente.
Se ha de tener en cuenta que esta constante se puede usar solamente en el array
driver_options
cuando se construye un nuevo gestor de base de datos.
-
MYSQL_ATTR_READ_DEFAULT_FILE
(integer)
-
Lee las opciones desde el fichero indicado en lugar de
my.cnf. Si se usa mysqlnd, esta opción no
está disponible debido a que mysqlnd no lee los fichero de
configuración de mysql.
-
MYSQL_ATTR_READ_DEFAULT_GROUP
(integer)
-
Opciones de lectura del grupo indicado desde my.cnf o
desde el fichero especificado con MYSQL_READ_DEFAULT_FILE
.
Si se usa mysqlnd, esta opción no está disponible debido a que mysqlnd no lee los
ficheros de configuración de mysql.
-
MYSQL_ATTR_MAX_BUFFER_SIZE
(integer)
-
Tamaño máximo del búfer. Lo predeterminado es MiB. Esta constante no está admitida cuando
se compila para mysqlnd.
-
MYSQL_ATTR_DIRECT_QUERY
(integer)
-
Realiza consultas directas, no usa setencias preparadas.
-
MYSQL_ATTR_FOUND_ROWS
(integer)
-
Devuelve el número de filas encontradas (coindicentes), no el
número de filas modificadas.
-
MYSQL_ATTR_IGNORE_SPACE
(integer)
-
Permite espacios después de los nombres de función. Hace de todos los nombres
de función palabras reservadas.
-
MYSQL_ATTR_COMPRESS
(integer)
-
Activa la compresión de comunicación de red. Esta también se admite cuando
se realizó la compilación con mysqlnd, a partir de PHP 5.3.11.
-
MYSQL_ATTR_SSL_CA
(integer)
-
La ruta al fichero de la autoridad certificadora SSL.
Existe a partir de PHP 5.3.7.
-
MYSQL_ATTR_SSL_CAPATH
(integer)
-
La ruta al directorio que contiene los certificados AC SSL
autorizados, los cuales están almacenados en formato PEM.
Existe a partir de PHP 5.3.7.
-
MYSQL_ATTR_SSL_CERT
(integer)
-
La ruta al fichero del certificado SSL.
Existe a partir de PHP 5.3.7.
-
PDO::MYSQL_ATTR_SSL_CIPHER
(integer)
-
Una lista de uno o más cifradores permisibles a usar para la encriptación SSL, en un formato
entendido por OpenSSL. Por ejemplo: DHE-RSA-AES256-SHA:AES128-SHA
Existe a partir de PHP 5.3.7.
-
PDO::MYSQL_ATTR_SSL_KEY
(integer)
-
La ruta al fichero de la clave SSL.
Existe a partir de PHP 5.3.7.
-
PDO::MYSQL_ATTR_MULTI_STATEMENTS
(integer)
-
Inhabilita la ejecución de multiconsultas tanto en PDO::prepare()
como en PDO::query() cuando se setablece a false
.
Observe que esta constante solamente se puede emplear en el array driver_options
al construir un nuevo manejador de base de datos.
Existe a partir de PHP 5.5.21 y PHP 5.6.5.
Configuración en tiempo de ejecución
El comportamiento de estas funciones se ve afectado por la configuración de php.ini.
Para más detalles y definiciones de los modos de
INI_*, vea
Dónde se puede realizar un ajuste de configuración.
He aquí una breve explicación de
las directivas de configuración.
-
pdo_mysql.default_socket
string
-
Establece un socket de dominio Unix. Este valor se puede establecer en tiempo de compilación si
un socket de dominio se encuentra en la configuración. Este ajuste ini es sólo de Unix.
-
pdo_mysql.debug
boolean
-
Activa la depuración de PDO_MYSQL. Este ajuste solo está disponible cuando
PDO_MYSQL está compilado para mysqlnd y en el modo de depuración de PDO.