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()
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.
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).
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.
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)
Pdo\Mysql::ATTR_USE_BUFFERED_QUERY
PDO::MYSQL_ATTR_LOCAL_INFILE
(int)
Pdo\Mysql::ATTR_LOCAL_INFILE
PDO::MYSQL_ATTR_LOCAL_INFILE_DIRECTORY
(int)
Pdo\Mysql::ATTR_LOCAL_INFILE_DIRECTORY
.
Disponible a partir de PHP 8.1.0.
PDO::MYSQL_ATTR_INIT_COMMAND
(int)
Pdo\Mysql::ATTR_INIT_COMMAND
PDO::MYSQL_ATTR_READ_DEFAULT_FILE
(int)
Pdo\Mysql::ATTR_READ_DEFAULT_FILE
PDO::MYSQL_ATTR_READ_DEFAULT_GROUP
(int)
Pdo\Mysql::ATTR_READ_DEFAULT_GROUP
PDO::MYSQL_ATTR_MAX_BUFFER_SIZE
(int)
Pdo\Mysql::ATTR_MAX_BUFFER_SIZE
PDO::MYSQL_ATTR_DIRECT_QUERY
(int)
PDO::ATTR_EMULATE_PREPARES
PDO::MYSQL_ATTR_FOUND_ROWS
(int)
Pdo\Mysql::ATTR_FOUND_ROWS
PDO::MYSQL_ATTR_IGNORE_SPACE
(int)
Pdo\Mysql::ATTR_IGNORE_SPACE
PDO::MYSQL_ATTR_COMPRESS
(int)
Pdo\Mysql::ATTR_COMPRESS
PDO::MYSQL_ATTR_SERVER_PUBLIC_KEY
(int)
Pdo\Mysql::ATTR_SERVER_PUBLIC_KEY
PDO::MYSQL_ATTR_SSL_CA
(int)
Pdo\Mysql::ATTR_SSL_CA
PDO::MYSQL_ATTR_SSL_CAPATH
(int)
Pdo\Mysql::ATTR_SSL_CAPATH
PDO::MYSQL_ATTR_SSL_CERT
(int)
Pdo\Mysql::ATTR_SSL_CERT
PDO::MYSQL_ATTR_SSL_CIPHER
(int)
Pdo\Mysql::ATTR_SSL_CIPHER
PDO::MYSQL_ATTR_SSL_KEY
(int)
Pdo\Mysql::ATTR_SSL_KEY
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT
(int)
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)
Pdo\Mysql::ATTR_MULTI_STATEMENTS
El comportamiento de estas funciones se ve afectado por la configuración de php.ini.
Nombre | Por defecto | Cambiable |
---|---|---|
pdo_mysql.default_socket | "/tmp/mysql.sock" | INI_SYSTEM |
pdo_mysql.debug | NULL | INI_SYSTEM |
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.
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()
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.
> 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.