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
sera supporté dans une version future de PHP. En attendant, 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 appropriées, ce qui revient à appeler la fonction » mysql_ssl_set() de l'API C MySQL. De plus, SSL ne peut être activé avec PDO::setAttribute car la connexion existe déjà. Reportez-vous à la documentation MySQL sur » la connexion sur MySQL en utilisant 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
(bool)
false
pour un objet
PDO, le pilote MySQL utilisera le
mode non bufferisé.
Exemple #1 Activation du mode non mis en cache de MySQL
<?php
$pdo = new PDO("mysql:host=localhost;dbname=world", 'my_user', 'my_password');
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
$unbufferedResult = $pdo->query("SELECT Name FROM City");
foreach ($unbufferedResult as $row) {
echo $row['Name'] . PHP_EOL;
?>
PDO::MYSQL_ATTR_LOCAL_INFILE
(int)
Active LOAD LOCAL INFILE
.
Notez que cette option n'a d'effet que si utilisée dans le tableau d'options
driver_options
du constructeur.
PDO::MYSQL_ATTR_LOCAL_INFILE_DIRECTORY
(string)
Permet de restreindre le chargement de LOCAL DATA aux fichiers localisé dans le dossier désigné. Disponible à partir de PHP 8.1.0.
Note, cette constante peut seulement être utilisé dans le tableau
driver_options
lors de la construction d'un nouvel
gestionnaire de base de donnée.
PDO::MYSQL_ATTR_INIT_COMMAND
(string)
Commande à exécuter lors de la connexion au serveur MySQL. Sera automatiquement ré-exécuté lors d'une reconnexion.
Notez que cette option n'a d'effet que si utilisée dans le tableau d'options
driver_options
du constructeur.
PDO::MYSQL_ATTR_READ_DEFAULT_FILE
(int)
Lit les options depuis le fichier nommé optionnel, plutôt que depuis my.cnf. Cette option n'est pas disponible lors de l'utilisation de mysqlnd car ce dernier ne lit pas les fichiers de configuration de mysql.
PDO::MYSQL_ATTR_READ_DEFAULT_GROUP
(int)
Lit les options depuis le groupe nommé du fichier my.cnf
ou depuis le fichier spécifié par MYSQL_READ_DEFAULT_FILE
.
Cette option n'est pas disponible lors de l'utilisation de
mysqlnd car ce dernier ne lit pas les fichiers de configuration de mysql.
PDO::MYSQL_ATTR_MAX_BUFFER_SIZE
(int)
Taille maximale du tampon. Par défaut, vaut 1 MiB. Cette constante n'est pas supportée lorsque mysqlnd est utilisé.
PDO::MYSQL_ATTR_DIRECT_QUERY
(int)
Effectue des requêtes directes, sans utiliser de requêtes préparées.
PDO::MYSQL_ATTR_FOUND_ROWS
(int)
Retourne le nombre d'enregistrements trouvés, pas le nombre d'enregistrements changés.
PDO::MYSQL_ATTR_IGNORE_SPACE
(int)
Autorise les espaces après les noms de fonctions. Fait en sorte que les noms de fonctions soient des mots réservés.
PDO::MYSQL_ATTR_COMPRESS
(int)
Active la compression de la communication réseau.
PDO::MYSQL_ATTR_SSL_CA
(int)
Chemin vers l'autorité certificat SSL.
PDO::MYSQL_ATTR_SSL_CAPATH
(int)
Chemin vers le dossier contenant les certificats SSL CA, stockés au format PEM.
PDO::MYSQL_ATTR_SSL_CERT
(int)
Chemin vers le certificat SSL.
PDO::MYSQL_ATTR_SSL_CIPHER
(int)
Liste d'un ou plusieurs ciphers pour utiliser lors du cryptage SSL, dans un format
reconnu par OpenSSL. Par exemple: DHE-RSA-AES256-SHA:AES128-SHA
PDO::MYSQL_ATTR_SSL_KEY
(int)
Chemin vers la clé SSL.
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT
(int)
Fournit un moyen de désactiver la vérification du certificat SSL du serveur.
Existe à partir de PHP 7.0.18 et PHP 7.1.4.
PDO::MYSQL_ATTR_MULTI_STATEMENTS
(int)
Désactive la requête d'exécution multiple à la fois dans PDO::prepare()
et PDO::query() quand définie à false
.
Il est à noter que cette constante peut seulement être utilisée dans le tableau
driver_options
lors de la construction d'un nouveau
gestionnaire de base de données.
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" | PHP_INI_SYSTEM |
pdo_mysql.debug | NULL | PHP_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.