PHP 8.5.0 Alpha 1 available for testing

Funciones del controlador PDO MySQL (PDO_MYSQL)

Introducción

PDO_MYSQL es un controlador que implementa la interfaz de 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

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.

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 (int)
Alias de PDO::ATTR_EMULATE_PREPARES
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 se ve afectado por la configuración de php.ini.

Opciones de configuración del driver 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 y definiciones de los modos de INI_*, vea Dónde una directiva de configuración puede ser modificada.

He aquí una breve explicación 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 driver PDO_MYSQL. Esta configuración solo está disponible cuando el driver PDO_MYSQL es compilado con mysqlnd y en modo de depurado PDO.

Tabla de contenidos

add a note

User Contributed Notes 3 notes

up
5
davey at php dot net
18 years ago
To use "PDO::MYSQL_ATTR_USE_BUFFERED_QUERY" you should call
PDO::setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);

It will not work when passed into PDO::prepare()
up
4
brian at diamondsea dot com
16 years ago
SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. ...

After spending hours trying to track down why we were getting this error on a new server, after the same code ran fine on other servers, we found the problem to be an old MySQL _client_ library running on our web server, and a latest-version MySQL _server_ running on the database server's box.

Upgraded the MySQL client on the web server to the current revision and the problem went away.
up
-2
snoyes at gmail dot com
8 months ago
> change it by setting default_authentication_plugin=mysql_native_password in my.cnf

This only works in MySQL 8.0. The default_authentication_plugin variable has been removed from 8.4.
To Top