# Fonctions du pilote PDO 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 utilise 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 apparaître, 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 l'on écrit 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 DDL 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 tels paramètres peuvent être utilisés, ils ne seront pas mis à jour (c.à.d. la sortie actuelle est ignorée).

## 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. Voir si c'est le cas pour le 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, il est possible de compiler cette extension soi-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, utiliser --with-pdo-mysql[=DIR] pour installer l'extension PDO MySQL, où `[=DIR]` est le chemin de la bibliothèque de base de MySQL. Mysqlnd est 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.

Avertissement

Les constantes listées ci-dessous sont OBSOLÈTES à partir de PHP 8.5.0. Utiliser les constantes Pdo\Mysql correspondantes à la place.

`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` (bool)
  Alias de `PDO::ATTR_EMULATE_PREPARES` À partir de PHP 8.4.0, cette constante est de type bool ; elle était auparavant de type 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 à 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

- PDO_MYSQL DSN — Connexion aux bases de données MySQL

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