# Funciones del controlador PDO MySQL (PDO_MYSQL)

## Introducción

PDO_MYSQL es un controlador que implementa la PHP Data Objects (PDO) para permitir el acceso de PHP a las bases de datos MySQL.

PDO_MYSQL utiliza consultas preparadas emuladas por omisión.

MySQL 8

Si PHP se utiliza en una versión 7.1 anterior a la versión 7.1.16, o PHP 7.2 anterior a 7.2.4, el complemento de contraseña debe establecerse en mysql_native_password para MySQL 8 Server, ya que de lo contrario pueden aparecer errores similares a The server requested authentication method unknown to the client [caching_sha2_password], incluso si caching_sha2_password no se utiliza.

Esto se debe a que MySQL 8 utiliza por omisión caching_sha2_password, un complemento que no es reconocido por las versiones antiguas de PHP (mysqlnd). En su lugar, debe modificarse el parámetro `default_authentication_plugin=mysql_native_password` en my.cnf. El complemento caching_sha2_password es completamente soportado a partir de PHP 7.4.4. Para versiones anteriores, la extensión mysql_xdevapi lo soporta.

Advertencia

Tenga en cuenta: ciertos tipos de tablas MySQL (motor de registro) no soportan transacciones. Cuando se escribe código de base de datos transaccional utilizando un tipo de tabla que no soporta transacciones, MySQL afirmará que una transacción fue iniciada correctamente. Además, cualquier consulta DLL publicada enviará implícitamente todas las transacciones pendientes.

> Nota:

> El controlador MySQL no soporta adecuadamente `PDO::PARAM_INPUT_OUTPUT` a través de PDOStatement::bindParam(); aunque tales parámetros pueden ser utilizados, no serán actualizados (es decir, la salida actual es ignorada).

## Instalación

Las distribuciones Linux incluyen versiones binarias de PHP que pueden ser instaladas. Incluso si estos binarios son construidos con las extensiones MySQL, las bibliotecas clientes deben ser a menudo instaladas mediante un paquete adicional. Verifique si es el caso para su distribución.

Por ejemplo, en Ubuntu el paquete `php5-mysql` instala las extensiones PHP ext/mysql, ext/mysqli, y pdo_mysql. En CentOS, el paquete `php-mysql` también instala estas tres extensiones PHP.

Alternativamente, puede compilar esta extensión usted mismo. Construir PHP desde las fuentes permite especificar las extensiones MySQL a incluir, así como las bibliotecas clientes de cada extensión.

Durante la compilación utilice --with-pdo-mysql[=DIR] para instalar la extensión PDO MySQL, donde `[=DIR]` es la ruta de la biblioteca base de MySQL. Mysqlnd y la biblioteca por defecto. Para más detalles sobre la elección de la biblioteca, ver Elegir una biblioteca MySQL.

Opcionalmente, la opción --with-mysql-sock[=DIR] define la ruta hacia el socket Unix MySQL para todas las extensiones MySQL, incluyendo PDO_MYSQL. Si no se especifica, se utilizarán las rutas por defecto.

Opcionalmente, la opción --with-zlib-dir[=DIR] será utilizada para definir el prefijo de instalación zlib.

    $ ./configure --with-pdo-mysql --with-mysql-sock=/var/mysql/mysql.sock

El soporte SSL es activado utilizando las constantes `Pdo\Mysql::ATTR_SSL_*`, lo cual equivale a llamar a la función API C » mysql_ssl_set(). Además, SSL no puede ser activado con PDO::setAttribute() ya que la conexión ya existe. Ver también la documentación MySQL sobre » la conexión a MySQL con SSL.

## Constantes predefinidas

Las constantes a continuación son definidas por este controlador y solo estarán disponibles cuando la extensión haya sido compilada en PHP o cargada dinámicamente del motor de ejecución. Además, estas constantes específicas del controlador deberían ser usadas solo si se usa este controlador. Usar atributos específicos de un controlador con otro controlador podría causar un comportamiento inesperado. PDO::getAttribute() podría ser usado para obtener el atributo `PDO::ATTR_DRIVER_NAME` para verificar el controlador, si su código puede funcionar en múltiples controladores.

Advertencia

Las constantes listadas a continuación están OBSOLETAS a partir de PHP 8.5.0. Utilice las constantes correspondientes de Pdo\Mysql en su lugar.

`PDO::MYSQL_ATTR_USE_BUFFERED_QUERY` (int)
  Alias de `Pdo\Mysql::ATTR_USE_BUFFERED_QUERY`
`PDO::MYSQL_ATTR_LOCAL_INFILE` (int)
  Alias de `Pdo\Mysql::ATTR_LOCAL_INFILE`
`PDO::MYSQL_ATTR_LOCAL_INFILE_DIRECTORY` (int)
  Alias de `Pdo\Mysql::ATTR_LOCAL_INFILE_DIRECTORY`. Disponible a partir de PHP 8.1.0.
`PDO::MYSQL_ATTR_INIT_COMMAND` (int)
  Alias de `Pdo\Mysql::ATTR_INIT_COMMAND`
`PDO::MYSQL_ATTR_READ_DEFAULT_FILE` (int)
  Alias de `Pdo\Mysql::ATTR_READ_DEFAULT_FILE`
`PDO::MYSQL_ATTR_READ_DEFAULT_GROUP` (int)
  Alias de `Pdo\Mysql::ATTR_READ_DEFAULT_GROUP`
`PDO::MYSQL_ATTR_MAX_BUFFER_SIZE` (int)
  Alias de `Pdo\Mysql::ATTR_MAX_BUFFER_SIZE`
`PDO::MYSQL_ATTR_DIRECT_QUERY` (bool)
  Alias de `PDO::ATTR_EMULATE_PREPARES` A partir de PHP 8.4.0 esta constante es de tipo bool; anteriormente, era de tipo int.
`PDO::MYSQL_ATTR_FOUND_ROWS` (int)
  Alias de `Pdo\Mysql::ATTR_FOUND_ROWS`
`PDO::MYSQL_ATTR_IGNORE_SPACE` (int)
  Alias de `Pdo\Mysql::ATTR_IGNORE_SPACE`
`PDO::MYSQL_ATTR_COMPRESS` (int)
  Alias de `Pdo\Mysql::ATTR_COMPRESS`
`PDO::MYSQL_ATTR_SERVER_PUBLIC_KEY` (int)
  Alias de `Pdo\Mysql::ATTR_SERVER_PUBLIC_KEY`
`PDO::MYSQL_ATTR_SSL_CA` (int)
  Alias de `Pdo\Mysql::ATTR_SSL_CA`
`PDO::MYSQL_ATTR_SSL_CAPATH` (int)
  Alias de `Pdo\Mysql::ATTR_SSL_CAPATH`
`PDO::MYSQL_ATTR_SSL_CERT` (int)
  Alias de `Pdo\Mysql::ATTR_SSL_CERT`
`PDO::MYSQL_ATTR_SSL_CIPHER` (int)
  Alias de `Pdo\Mysql::ATTR_SSL_CIPHER`
`PDO::MYSQL_ATTR_SSL_KEY` (int)
  Alias de `Pdo\Mysql::ATTR_SSL_KEY`
`PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT` (int)
  Alias de `Pdo\Mysql::ATTR_SSL_VERIFY_SERVER_CERT` Disponible a partir de PHP 7.0.18 y PHP 7.1.4.
`PDO::MYSQL_ATTR_MULTI_STATEMENTS` (int)
  Alias de `Pdo\Mysql::ATTR_MULTI_STATEMENTS`

## Configuración en tiempo de ejecución

El comportamiento de estas funciones es afectado por la configuración en el archivo php.ini.

Opciones de configuración del controlador PDO_MYSQL
Nombre | Por defecto | Cambiable
--- | --- | ---
pdo_mysql.default_socket | "/tmp/mysql.sock" | `INI_SYSTEM`
pdo_mysql.debug | NULL | `INI_SYSTEM`

Para más detalles sobre los modos INI_*, refiérase a Dónde una directiva de configuración puede ser modificada.

Aquí hay una aclaración sobre el uso de las directivas de configuración.

`pdo_mysql.default_socket` string

  Se define un socket de dominio Unix. El valor puede ser también definido en el momento de la compilación si se encuentra un socket de dominio Unix durante la configuración. Esta configuración INI solo está disponible bajo Unix.

`pdo_mysql.debug` bool

  Se activa el depurado para el controlador PDO_MYSQL. Esta configuración solo está disponible cuando el controlador PDO_MYSQL es compilado con mysqlnd y en modo de depurado PDO.

## Tabla de contenidos

- PDO_MYSQL DSN — Conexión a las bases de datos MySQL

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open