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 est un pilote qui implémente l'interface de PHP Data Objects (PDO) pour autoriser l'accès de PHP aux bases de données MySQL.
PDO_MYSQL utilises des requêtes préparées émulées par défaut.
MySQL 8
Si PHP est utilisé dans une version 7.1 antérieure à la version 7.1.16, ou PHP 7.2 antérieure à 7.2.4, le plugin de mot de passe doit être défini à mysql_native_password pour MySQL 8 Server, car sinon des erreurs similaires à The server requested authentication method unknown to the client [caching_sha2_password] peuvent apparaitre, même si caching_sha2_password n'est pas utilisé.
Ceci est dû au fait que MySQL 8 utilise par défaut caching_sha2_password,
un plugin qui n'est pas reconnu par les anciennes versions de PHP (mysqlnd).
À la place il faut modifier le paramètre
default_authentication_plugin=mysql_native_password
dans
my.cnf. Le plugin caching_sha2_password
est pleinement supporté à partir de PHP 7.4.4. Pour les versions antérieures,
l'extension mysql_xdevapi le supporte.
Prendre garde toutefois : certains types de tables MySQL (moteur d'enregistrement) ne supportent pas les transactions. Lorsque vous écrivez du code de base de données transactionnel en utilisant un type de table qui ne supporte pas les transactions, MySQL prétendra qu'une transaction était initiée correctement. De plus, toute requête DLL publiée enverra implicitement l'ensemble des transactions en attente.
Note:
Le pilote MySQL ne supporte pas proprement
PDO::PARAM_INPUT_OUTPUT
via PDOStatement::bindParam(); tandis que de tel paramètres peuvent être utilisé, il ne seront pas mis à jour (c.à.d. la sortie actuel est ignoré).
Les distributions Linux incluent des versions binaires de PHP qui peuvent être installées. Même si ces binaires sont construits avec les extensions MySQL, les bibliothèques clientes doivent souvent être installées au moyen d'un paquet additionnel. Voyez si c'est le cas pour votre distribution.
Par exemple, sur Ubuntu le package php5-mysql
installe les
extensions PHP ext/mysql, ext/mysqli, et pdo_mysql. Sur CentOS, le package
php-mysql
installe aussi ces trois extensions PHP.
Alternativement, vous pouvez compiler cette extension vous-même. Construire PHP depuis les sources permet de préciser les extensions MySQL à embarquer, mais aussi les bibliothèques clientes de chaque extension.
Lors de la compilation utilisez --with-pdo-mysql[=DIR]
pour installer l'extension PDO MySQL, où [=DIR]
est le chemin
de la bibliothèque de base de MySQL.
Mysqlnd et la bibliothèque par défaut.
Pour plus de détails à propos du choix de la bibliothèque, voir
Choisir une bibliothèque MySQL.
Optionnellement, l'option --with-mysql-sock[=DIR] définit le chemin vers le socket Unix MySQL pour toutes les extensions MySQL, y compris PDO_MYSQL. Si non spécifié, les chemins par défaut seront utilisés.
Optionnellement, l'option --with-zlib-dir[=DIR] sera utilisée pour définir le préfixe d'installation zlib.
$ ./configure --with-pdo-mysql --with-mysql-sock=/var/mysql/mysql.sock
Le support SSL est activé en utilisant les constantes
Pdo\Mysql::ATTR_SSL_*
,
ce qui équivaut à appeler la fonction API C
» mysql_ssl_set().
De plus, SSL ne peut pas être activé avec PDO::setAttribute()
car la connexion existe déjà.
Voir également la documentation MySQL concernant
» la connexion à MySQL avec SSL.
Les constantes ci-dessous sont
définies par ce pilote et seront seulement disponibles lorsque l'extension
aura été compilée dans PHP ou chargée dynamiquement du moteur d'exécution.
De plus, ces constantes spécifiques au pilote devraient être utilisées seulement
si vous utilisez ce pilote. En utilisant les attributs spécifiques à un pilote
avec un autre pilote pourrait causer un comportement inattendu.
PDO::getAttribute() pourrait être utilisé pour obtenir
l'attribut PDO::ATTR_DRIVER_NAME
pour vérifier le
pilote, si votre code peut fonctionner sur des pilotes multiples.
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 à 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 à partir de PHP 7.0.18 et PHP 7.1.4.
PDO::MYSQL_ATTR_MULTI_STATEMENTS
(int)
Pdo\Mysql::ATTR_MULTI_STATEMENTS
Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.
Nom | Défaut | Modifiable |
---|---|---|
pdo_mysql.default_socket | "/tmp/mysql.sock" | INI_SYSTEM |
pdo_mysql.debug | NULL | INI_SYSTEM |
Voici un éclaircissement sur l'utilisation des directives de configuration.
pdo_mysql.default_socket
string
Définit un socket de domaine Unix. La valeur peut aussi être définie au moment de la compilation si un socket de domaine Unix est trouvé lors de la configuration. Cette configuration INI n'est disponible que sous Unix.
pdo_mysql.debug
bool
Active le débogage pour le driver PDO_MYSQL. Cette configuration n'est disponible que lorsque le driver PDO_MYSQL est compilé avec mysqlnd et en mode de débogage 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.