mirror of
https://github.com/macintoshplus/doc-fr.git
synced 2026-03-26 09:52:17 +01:00
458 lines
15 KiB
XML
458 lines
15 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: 67d2e5fb1dc83aea4e82ec1e6b5a39299eff6bab Maintainer: yannick Status: ready -->
|
|
<!-- Reviewed: no -->
|
|
|
|
<set xml:id="set.mysqlinfo">
|
|
<title>Plugins et drivers MySQL</title>
|
|
<titleabbrev>MySQL</titleabbrev>
|
|
|
|
<info xml:id="mysqlinfo.info">
|
|
<abstract>
|
|
<para>
|
|
PHP offre plusieurs drivers et plugins MySQL pour accéder
|
|
et gérer MySQL.
|
|
</para>
|
|
<para>
|
|
Les différences et les fonctionnalités des extensions MySQL
|
|
sont décrites dans la résumé de cette section.
|
|
</para>
|
|
</abstract>
|
|
</info>
|
|
|
|
<book xml:id="mysql">
|
|
<title>Aperçu des drivers PHP MySQL</title>
|
|
|
|
<info xml:id="mysqlinfo.intro">
|
|
<title>Introduction</title>
|
|
<abstract>
|
|
<para>
|
|
Il y a plusieurs APIs PHP pour accéder à une base de données MySQL.
|
|
Les utilisateurs peuvent choisir entre les extensions
|
|
<link linkend="book.mysqli">mysqli</link> ou
|
|
<link linkend="ref.pdo-mysql">PDO_MySQL</link>.
|
|
</para>
|
|
<para>
|
|
Ce guide explique la <link linkend="mysqlinfo.terminology">terminologie</link>
|
|
utilisée pour décrire chacune d'elles, fournit des informations
|
|
quant <link linkend="mysqlinfo.api.choosing">aux choix de l'API</link>
|
|
à utiliser, ainsi que des informations vous permettant de vous
|
|
aider à choisir la <link linkend="mysqlinfo.library.choosing">bibliothèque
|
|
MySQL à utiliser</link> avec l'API.
|
|
</para>
|
|
</abstract>
|
|
</info>
|
|
|
|
<chapter xml:id="mysqlinfo.terminology" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
<title>Aperçu de la terminologie</title>
|
|
<para>
|
|
Cette section fournit une introduction aux options qui vous sont disponibles
|
|
lors du développement d'une application PHP qui doit interagir avec
|
|
une base de données MySQL.
|
|
</para>
|
|
|
|
<para>
|
|
<emphasis role="bold">Qu'est-ce qu'une API ?</emphasis>
|
|
</para>
|
|
|
|
<para>
|
|
Une interface de programmation d'application, ou API, définit les classes,
|
|
les méthodes, les fonctions et les variables dont votre application
|
|
a besoin pour réaliser les tâches désirées. Dans le cas des applications
|
|
PHP qui ont besoin de communiquer avec des bases de données, les APIs
|
|
nécessaires sont habituellement exposées via des extensions PHP.
|
|
</para>
|
|
|
|
<para>
|
|
Les APIs peuvent être procédurales ou orientées objet. Avec une API
|
|
procédurale, vous appelez des fonctions pour réaliser vos tâches,
|
|
avec une API orientée objet, vous instanciez les classes, puis vous
|
|
appelez les méthodes sur les objets résultants. La seconde interface
|
|
est généralement préférée car elle est plus moderne et permet
|
|
de mieux organiser le code source.
|
|
</para>
|
|
|
|
<para>
|
|
Lors de l'écriture d'applications PHP qui ont besoin de se connecter
|
|
à un serveur MySQL, il y a plusieurs options de l'API disponibles.
|
|
Ce document va aborder ce qui est disponible, et comment choisir
|
|
la meilleure solution pour votre application.
|
|
</para>
|
|
|
|
<para>
|
|
<emphasis role="bold">Qu'est-ce qu'un connecteur ?</emphasis>
|
|
</para>
|
|
|
|
<para>
|
|
Dans la documentation MySQL, le terme <emphasis>connecteur</emphasis>
|
|
se réfère à la partie du programme qui autorise votre application
|
|
à se connecter au serveur de base de données MySQL. MySQL fournit
|
|
des connecteurs pour bons nombres de langages, incluant PHP.
|
|
</para>
|
|
|
|
<para>
|
|
Si votre application PHP a besoin de communiquer avec un serveur
|
|
de base de données, vous devez écrire votre code PHP pour effectuer
|
|
des tâches comme se connecter au serveur de base de données,
|
|
requêter la base de données ainsi que d'autres tâches relatives
|
|
à la base de données. Le programme est requis pour fournir l'API
|
|
à utiliser par votre application PHP, mais aussi pour gérer
|
|
la communication entre votre application et le serveur de base
|
|
de données, en utilisant des bibliothèques intermédiaires
|
|
au besoin. Ce programme est généralement appelé connecteur,
|
|
vu qu'il autorise votre application à se <emphasis>connecter</emphasis>
|
|
au serveur de base de données.
|
|
</para>
|
|
|
|
<para>
|
|
<emphasis role="bold">Qu'est-ce qu'un driver ?</emphasis>
|
|
</para>
|
|
|
|
<para>
|
|
Un driver est une partie de programme dont le but est de communiquer
|
|
avec un type spécifique de serveur de base de données. Le driver
|
|
peut également appeler une bibliothèque, comme la bibliothèque
|
|
cliente MySQL ou le driver natif MySQL. Ces bibliothèques implémentent
|
|
le protocole bas niveau utilisé pour communiquer avec le serveur
|
|
de base de données MySQL.
|
|
</para>
|
|
|
|
<para>
|
|
Par le biais d'un exemple, la couche d'abstraction de base de données
|
|
<link linkend="mysqli.overview.pdo">PHP Data Objects (PDO)</link> peut
|
|
utiliser un des drivers spécifiques au base de données. Un de ces drivers
|
|
disponible est le driver PDO MYSQL, qui fournit une interface
|
|
avec le serveur MySQL.
|
|
</para>
|
|
|
|
<para>
|
|
Quelques fois, des personnes utilisent les termes connecteur et driver
|
|
à l'envers, ce qui peut porter à confusion. Dans la documentation
|
|
MySQL, le terme <quote>driver</quote> est réservé au programme qui
|
|
fournit la partie spécifique à la base de données d'un connecteur.
|
|
</para>
|
|
|
|
<para>
|
|
<emphasis role="bold">Qu'est-ce qu'une extension ?</emphasis>
|
|
</para>
|
|
|
|
<para>
|
|
Dans la documentation PHP, vous trouverez un autre terme -
|
|
<emphasis>extension</emphasis>. Le code PHP est constitué
|
|
d'un cœur, avec des extensions optionnelles permettant
|
|
d'étendre les fonctionnalités du cœur. Les extensions PHP relatives
|
|
aux bases de données, comme l'extension <literal>mysqli</literal>
|
|
qui est implémentée en utilisant le framework des extensions PHP.
|
|
</para>
|
|
|
|
<para>
|
|
Typiquement, une extension expose une API au programmeur PHP, lui
|
|
permettant quelques facilités lors de la programmation. Cependant,
|
|
quelques extensions qui utilisent le framework d'extension PHP
|
|
n'expose aucune API au programmeur PHP.
|
|
</para>
|
|
|
|
<para>
|
|
L'extension driver PDO MySQL, par exemple, n'expose aucune API
|
|
au programmeur PHP, mais fournit une interface à la couche PDO.
|
|
</para>
|
|
|
|
<para>
|
|
Les termes API et extension ne doivent pas être vus comme signifiant
|
|
la même chose, car une extension n'expose pas forcément une API au
|
|
programmeur.
|
|
</para>
|
|
</chapter>
|
|
|
|
<chapter xml:id="mysqlinfo.api.choosing" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
<title>Choisir une API</title>
|
|
<para>
|
|
PHP offre des APIs différentes pour se connecter à MySQL. Ci-dessous, vous
|
|
trouverez les APIs fournies par les extensions mysqli et PDO.
|
|
Chaque exemple de code crée une connexion à un serveur MySQL s'exécutant sur
|
|
le domaine "example.com", en utilisant le nom d'utilisateur "user", le mot
|
|
de passe "password". Et une requête est exécutée pour saluer l'utilisateur.
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Comparaison des APIs MySQL</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
// mysqli
|
|
$mysqli = new mysqli("example.com", "user", "password", "database");
|
|
$result = $mysqli->query("SELECT 'Bonjour, cher utilisateur de MySQL !' AS _message FROM DUAL");
|
|
$row = $result->fetch_assoc();
|
|
echo htmlentities($row['_message']);
|
|
|
|
// PDO
|
|
$pdo = new PDO('mysql:host=example.com;dbname=database', 'user', 'password');
|
|
$statement = $pdo->query("SELECT 'Bonjour, cher utilisateur de MySQL !' AS _message FROM DUAL");
|
|
$row = $statement->fetch(PDO::FETCH_ASSOC);
|
|
echo htmlentities($row['_message']);
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<emphasis role="bold">Comparaison des fonctionnalités</emphasis>
|
|
</para>
|
|
<para>
|
|
La performance globale des deux extensions peut être considérée comme identique.
|
|
Malgré tout, la performance de l'extension constitue seulement une fraction
|
|
du temps total d'exécution d'une requête web PHP.
|
|
Souvent, l'impact est inférieur à 0.1%.
|
|
</para>
|
|
<informaltable xml:id="mysqlinfo.api.choosing.changelog">
|
|
<tgroup cols="3">
|
|
<thead>
|
|
<row>
|
|
<entry></entry>
|
|
<entry>ext/mysqli</entry>
|
|
<entry>PDO_MySQL</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>Introduite en PHP version</entry>
|
|
<entry>5.0</entry>
|
|
<entry>5.1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Inclus avec PHP 7.x et 8.x</entry>
|
|
<entry>Oui</entry>
|
|
<entry>Oui</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Statut du développement</entry>
|
|
<entry>Active</entry>
|
|
<entry>Active</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Cycle de vie</entry>
|
|
<entry>Active</entry>
|
|
<entry>Active</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Recommandé pour de nouveaux projets</entry>
|
|
<entry>Oui</entry>
|
|
<entry>Oui</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Interface orientée objet</entry>
|
|
<entry>Oui</entry>
|
|
<entry>Oui</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Interface procédurale</entry>
|
|
<entry>Oui</entry>
|
|
<entry>Non</entry>
|
|
</row>
|
|
<row>
|
|
<entry>L'API supporte les requêtes non-bloquantes, asynchrones avec mysqlnd</entry>
|
|
<entry>Oui</entry>
|
|
<entry>Non</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Connexions persistantes disponibles</entry>
|
|
<entry>Oui</entry>
|
|
<entry>Oui</entry>
|
|
</row>
|
|
<row>
|
|
<entry>L'API supporte les jeux de caractères</entry>
|
|
<entry>Oui</entry>
|
|
<entry>Oui</entry>
|
|
</row>
|
|
<row>
|
|
<entry>L'API supporte les requêtes préparées côté serveur</entry>
|
|
<entry>Oui</entry>
|
|
<entry>Oui</entry>
|
|
</row>
|
|
<row>
|
|
<entry>L'API supporte les requêtes préparées côté client</entry>
|
|
<entry>Non</entry>
|
|
<entry>Oui</entry>
|
|
</row>
|
|
<row>
|
|
<entry>L'API supporte les procédures stockées</entry>
|
|
<entry>Oui</entry>
|
|
<entry>Oui</entry>
|
|
</row>
|
|
<row>
|
|
<entry>L'API supporte les requêtes multiples</entry>
|
|
<entry>Oui</entry>
|
|
<entry>La plupart</entry>
|
|
</row>
|
|
<row>
|
|
<entry>L'API supporte les transactions</entry>
|
|
<entry>Oui</entry>
|
|
<entry>Oui</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Les transactions peuvent être contrôlées avec SQL</entry>
|
|
<entry>Oui</entry>
|
|
<entry>Oui</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Supporte toutes les fonctionnalités de MySQL 5.1+</entry>
|
|
<entry>Oui</entry>
|
|
<entry>La plupart</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</chapter>
|
|
|
|
<chapter xml:id="mysqlinfo.library.choosing" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
<title>Choisir une bibliothèque</title>
|
|
<para>
|
|
Les extensions PHP mysqli et PDO_MySQL sont des wrappers légers d'une
|
|
bibliothèque cliente C. Les extensions peuvent soit utiliser la bibliothèque
|
|
<link linkend="book.mysqlnd">mysqlnd</link>, soit la bibliothèque <literal>libmysqlclient</literal>.
|
|
Le choix de la bibliothèque se fait au moment de la compilation.
|
|
</para>
|
|
<para>
|
|
La bibliothèque mysqlnd fait partie de la distribution de PHP.
|
|
Elle offre des fonctionnalités comme les connexions paresseuses,
|
|
la mise en cache de requêtes, qui ne sont pas disponibles avec libmysqlclient,
|
|
aussi, nous vous recommandons d'utiliser la bibliothèque interne mysqlnd.
|
|
Voir la <link linkend="book.mysqlnd">documentation de mysqlnd</link>
|
|
pour plus d'informations,ainsi qu'une liste des fonctionnalités qu'elle offre.
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Commande de configuration pour l'utilisation de mysqlnd ou de libmysqlclient</title>
|
|
<programlisting role="shell">
|
|
<![CDATA[
|
|
// Recommandé, compilation avec mysqlnd
|
|
$ ./configure --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd
|
|
|
|
// Alternativement recommandé, compilation avec mysqlnd
|
|
$ ./configure --with-mysqli --with-pdo-mysql
|
|
|
|
// Non recommandé, compilation avec libmysqlclient
|
|
$ ./configure --with-mysqli=/path/to/mysql_config --with-pdo-mysql=/path/to/mysql_config
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<emphasis role="bold">Comparaison des fonctionnalités des bibliothèques</emphasis>
|
|
</para>
|
|
<para>
|
|
Il est recommandé d'utiliser la bibliothèque <link linkend="book.mysqlnd">mysqlnd</link>
|
|
au lieu de la bibliothèque client serveur MySQL (libmysqlclient). Les deux bibliothèques
|
|
sont supportées et améliorées en permanence.
|
|
</para>
|
|
<informaltable xml:id="mysqlinfo.library.choosing.changelog">
|
|
<tgroup cols="3">
|
|
<thead>
|
|
<row>
|
|
<entry></entry>
|
|
<entry>Driver natif MySQL (<link linkend="book.mysqlnd">mysqlnd</link>)</entry>
|
|
<entry>Bibliothèque client serveur MySQL (<literal>libmysqlclient</literal>)</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>Fait partie de la distribution de PHP</entry>
|
|
<entry>Oui</entry>
|
|
<entry>Non</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Introduit en version de PHP</entry>
|
|
<entry>5.3.0</entry>
|
|
<entry>N/A</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Licence</entry>
|
|
<entry>PHP Licence 3.01</entry>
|
|
<entry>Double-licence</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Statut de développement</entry>
|
|
<entry>Actif</entry>
|
|
<entry>Actif</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Cycle de vie</entry>
|
|
<entry>Pas de fin d'annoncé</entry>
|
|
<entry>Pas de fin d'annoncé</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Compilé par défaut (pour toutes les extensions MySQL)</entry>
|
|
<entry>Oui</entry>
|
|
<entry>Non</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Support du protocole de compression</entry>
|
|
<entry>Oui</entry>
|
|
<entry>Oui</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Support de SSL</entry>
|
|
<entry>Oui</entry>
|
|
<entry>Oui</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Support des pipes nommés</entry>
|
|
<entry>Oui</entry>
|
|
<entry>Oui</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Requêtes non bloquantes, asynchrones</entry>
|
|
<entry>Oui</entry>
|
|
<entry>Non</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Statistiques sur les performances</entry>
|
|
<entry>Oui</entry>
|
|
<entry>Non</entry>
|
|
</row>
|
|
<row>
|
|
<entry>LOAD LOCAL INFILE respecte la <link linkend="ini.open-basedir">directive open_basedir</link></entry>
|
|
<entry>Oui</entry>
|
|
<entry>Non</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Utilisation du système de gestion de la mémoire native de PHP
|
|
(i.e., suit les limites mémoires de PHP)</entry>
|
|
<entry>Oui</entry>
|
|
<entry>Non</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Retourne les colonnes numériques sous la forme de double (COM_QUERY)</entry>
|
|
<entry>Oui</entry>
|
|
<entry>Non</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Retourne les colonnes numériques sous la forme de chaînes de caractères (COM_QUERY)</entry>
|
|
<entry>Oui</entry>
|
|
<entry>Oui</entry>
|
|
</row>
|
|
<row>
|
|
<entry>API du plugin</entry>
|
|
<entry>Oui</entry>
|
|
<entry>Limité</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Reconnexion automatique</entry>
|
|
<entry>Non</entry>
|
|
<entry>Optionnel</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</chapter>
|
|
|
|
&reference.mysqlinfo.concepts;
|
|
|
|
</book>
|
|
|
|
&reference.mysqli.book;
|
|
&reference.mysql-xdevapi.book;
|
|
&reference.mysql.book;
|
|
&reference.mysqlnd.book;
|
|
|
|
</set>
|