PHP 8.4.2 Released!

Fonctions MySQL (PDO_MYSQL)

Introduction

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.

Avertissement

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é).

Installation

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.

Constantes pré-définies

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)
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 à 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 à partir de PHP 7.0.18 et PHP 7.1.4.
PDO::MYSQL_ATTR_MULTI_STATEMENTS (int)
Alias de Pdo\Mysql::ATTR_MULTI_STATEMENTS

Configuration à l'exécution

Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.

Options de configuration du driver PDO_MYSQL
Nom Défaut Modifiable
pdo_mysql.default_socket "/tmp/mysql.sock" INI_SYSTEM
pdo_mysql.debug NULL INI_SYSTEM
Pour plus de détails sur les modes INI_*, reportez-vous à Où une directive de configuration peut être modifiée.

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.

Sommaire

add a note

User Contributed Notes 3 notes

up
6
davey at php dot net
17 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
5
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
-1
snoyes at gmail dot com
1 month 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