<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/book.mysqli.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'mysqli.overview.php',
    1 => 'Introduction',
    2 => 'Introduction',
  ),
  'up' => 
  array (
    0 => 'book.mysqli.php',
    1 => 'MySQLi',
  ),
  'prev' => 
  array (
    0 => 'book.mysqli.php',
    1 => 'MySQLi',
  ),
  'next' => 
  array (
    0 => 'mysqli.quickstart.php',
    1 => 'Guide de d&eacute;marrage rapide',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'reference/mysqli/overview.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="mysqli.overview" class="chapter">

  <h1 class="title">Introduction</h1>


  <p class="para">
    Cette section fournit des informations sur les solutions qui
    sont disponibles quand on développe une application PHP qui a
    besoin de s&#039;interfacer avec une base de données MySQL.
  </p>

  <p class="para">
    <strong>Qu&#039;est-ce qu&#039;une API?</strong>
  </p>

  <p class="para">
    Une Interface de programmation d&#039;application, une 
    <code class="literal">Application Programming Interface</code>, ou encore API,
    définit les classes, méthodes, fonctions et variables dont une
    application va faire usage pour exécuter différentes tâches. Dans le cas
    des applications PHP, les communications avec une base de données
    se font généralement par une API qui est exposée dans une extension PHP.
  </p>

  <p class="para">
    Les API peuvent être procédurales ou orientées objet. Avec une API procédurale,
    il est possible d&#039;appeler les fonctions pour exécuter des commandes; avec une
    API orientée objet, il faut créer des objets et appeler les méthodes
    de ces objets. Des deux, c&#039;est la dernière qui est généralement préférée,
    car elle est plus moderne et conduit à du code plus organisé.
  </p>

  <p class="para">
    Lors de l&#039;écriture d&#039;applications PHP qui doivent se connecter à MySQL,
    il y a plusieurs API disponibles. Ce document présente ces API, et 
    donne les informations pour choisir la meilleure solution pour 
    l&#039;application.
  </p>

  <p class="para">
    <strong>Qu&#039;est-ce qu&#039;un connecteur?</strong>
  </p>

  <p class="para">
    Dans la documentation MySQL, le terme <em>connector</em>
    fait référence à un logiciel qui permet à une application de se connecter
    à une base de données MySQL. MySQL fournit des connecteurs pour toute une
    collection de langages, y compris PHP.
  </p>

  <p class="para">
    Si l&#039;application PHP a besoin de communiquer avec un serveur de
    base de données, il faut écrire du code pour pouvoir se connecter,
    envoyer des requêtes au serveur, etc. Un logiciel est nécessaire pour
    assurer l&#039;interface que PHP va utiliser et gérer les communications 
    entre l&#039;application et le serveur de base de données : éventuellement,
    des bibliothèques intermédiaires sont nécessaires. Ces logiciels sont appelés
    de manière générique des connecteurs, car ils permettent de se 
    <em>connecter</em> à un serveur de base de données.
  </p>

  <p class="para">
    <strong>Qu&#039;est-ce qu&#039;un pilote ?</strong>
  </p>

  <p class="para">
    Un pilote est un logiciel qui est conçu pour communiquer avec
    un type particulier de base de données. Un pilote peut aussi être
    appelé une bibliothèque, telle que la 
    <code class="literal">MySQL Client Library</code> ou le
    MySQL Native Driver. Ces bibliothèques implémentent le protocole
    de bas niveau pour communiquer avec un serveur MySQL.
  </p>

  <p class="para">
    Par exemple, la couche d&#039;abstraction de base de données
    <a href="mysqli.overview.php#mysqli.overview.pdo" class="link">PHP Data Objects (PDO)</a> utilise
    un ou plusieurs pilotes de base de données. Un de ces pilotes est le
    pilote PDO MYSQL, qui permet de faire l&#039;interface avec MySQL.
  </p>

  <p class="para">
    Parfois, les développeurs utilisent les termes de connecteur et de pilote
    de manière interchangeable, et cela peut être confus. Dans les
    documentations MySQL, le terme de <q class="quote">pilote</q> est réservé
    aux logiciels qui sont la face spécifique avec la base de données du
    paquet.
  </p>

  <p class="para">
    <strong>Qu&#039;est-ce qu&#039;une extension?</strong>
  </p>

  <p class="para">
   Dans la documentation PHP, on rencontrera un autre terme : 
   <em>extension</em>. Le code PHP est constitué d&#039;un cœur,
   avec des extensions optionnelles. Les extensions liées à MySQL de PHP,
   telles que l&#039;extension <code class="literal">mysqli</code> et l&#039;extension de pilote
   PDO MySQL, sont implémentées en utilisant le framework d&#039;extension PHP.
  </p>

  <p class="para">
    Une extension expose typiquement une API à un développeur PHP,
    pour lui permettre de faciliter sa programmation. Cependant,
    certaines extensions qui utilisent le framework PHP n&#039;exposent
    pas d&#039;API au développeur PHP.
  </p>

  <p class="para">
    L&#039;extension de pilote PDO MySQL, par exemple, n&#039;expose pas d&#039;API au
    développeur PHP, mais fournit une interface à la couche PDO.
  </p>

  <p class="para">
    Les termes API et extension ne devraient pas signifier la même chose,
    car une extension PHP ne fournit pas d&#039;API particulière au développeur PHP.
  </p>

  <p class="para">
    <strong>Quelles sont les API PHP pour MySQL ?</strong>
  </p>

  <p class="para">
    Il y a deux API principales pour se connecter à MySQL : 
  </p>

  <ul class="itemizedlist">

    <li class="listitem">
      <p class="para">
        L&#039;extension mysqli 
      </p>
    </li>

    <li class="listitem">
      <p class="para">
        PHP Data Objects (PDO)
      </p>
    </li>

  </ul>

  <p class="para">
    Chacune a ses avantages et ses inconvénients. Les sections suivantes
    tendent à donner une présentation rapide de chaque API.
  </p>

  <p class="para">
    <strong>Qu&#039;est-ce que l&#039;extension mysqli de PHP ?</strong>
  </p>

  <p class="para">
    L&#039;extension <code class="literal">mysqli</code>, ou, comme elle est parfois appelée,
    l&#039;extension MySQL <em>améliorée</em> (i pour <code class="literal">improved</code>
    en anglais), a été développée pour tirer parti des nouvelles fonctionnalités
    des systèmes MySQL version 4.1.3 et plus récent. L&#039;extension
    <code class="literal">mysqli</code> est incluse dans PHP depuis les versions 5.
  </p>

  <p class="para">
    L&#039;extension <code class="literal">mysqli</code> a un grand nombre d&#039;avantages
    et d&#039;améliorations par rapport à l&#039;extension <code class="literal">mysql</code> :

    <ul class="itemizedlist">

      <li class="listitem">
        <p class="para">
          Interface orientée objet
        </p>
      </li>

      <li class="listitem">
        <p class="para">
          Support des commandes préparées
        </p>
      </li>

      <li class="listitem">
        <p class="para">
          Support des commandes multiples
        </p>
      </li>

      <li class="listitem">
        <p class="para">
          Support des transactions
        </p>
      </li>

      <li class="listitem">
        <p class="para">
          Capacités de débogage avancées
        </p>
      </li>

    </ul>
  </p>

  <p class="para">
    En plus d&#039;une interface orientée objet, l&#039;extension propose aussi
    une interface procédurale.
  </p>

  <p class="para">
    L&#039;extension <code class="literal">mysqli</code> est compilée avec le framework
    PHP, et son code source est rangé dans le dossier <var class="filename">ext/mysqli</var>.
  </p>

  <p class="para">
    Pour plus d&#039;informations sur l&#039;extension <code class="literal">mysqli</code>,
    voir <a href="book.mysqli.php" class="xref">MySQLi</a>.
  </p>

  <p class="para" id="mysqli.overview.pdo">
    <strong>Qu&#039;est-ce que l&#039;extension PDO de PHP ?</strong>
  </p>

  <p class="para">
    <code class="literal">PHP Data Objects</code>, ou PDO, est une couche d&#039;abstraction
    de base de données, spécifique à PHP. PDO propose une API cohérente pour les
    applications PHP, indépendamment du type de base de données avec laquelle
    on travaille. En théorie, lors de l&#039;utilisation de PDO, il est possible de
    changer de base de données, disons de Firebird à MySQL, et ne faire que
    des changements mineurs au code PHP.
  </p>

  <p class="para">
    D&#039;autres exemples de couches d&#039;abstraction de base de données incluent
    JDBC pour Java et DBI pour Perl.
  </p>

  <p class="para">
    Si PDO a ses avantages, comme une API propre, simple et portable, 
    ses inconvénients principaux sont qu&#039;elle ne permet pas d&#039;utiliser
    toutes les fonctionnalités avancées des dernières versions de MySQL.
    Par exemple, PDO ne permet pas de faire des requêtes multiples.
  </p>

  <p class="para">
    PDO est implémenté en utilisant le framework PHP, et son code source
    est rangé dans le dossier <var class="filename">ext/pdo</var>.
  </p>

  <p class="para">
    Pour plus d&#039;informations sur PDO, voir <a href="book.pdo.php" class="xref">PDO</a>.
  </p>

  <p class="para">
    <strong>Qu&#039;est-ce que le pilote MySQL pour PDO ?</strong>
  </p>

  <p class="para">
    Le pilote PDO MYSQL n&#039;est pas une API en tant que tel, au moins du
    point de vue du développeur PHP. En fait, le pilote PDO MYSQL fait partie
    de PDO, et fournit les fonctionnalités particulières à MySQL. Le 
    développeur appelle l&#039;API PDO, mais PDO utilise le pilote PDO MYSQL
    pour assurer les communications avec MySQL.
  </p>

  <p class="para">
    Le pilote PDO MYSQL fait partie de la grande famille des pilotes PDO.
    Les autres pilotes disponibles assurent les communications avec 
    Firebird et PostgreSQL, entre autres.
  </p>

  <p class="para">
    Le pilote PDO MYSQL est implémenté avec le framework d&#039;extension de PHP.
    Son code source est situé dans le dossier <var class="filename">ext/pdo_mysql</var>. 
    Il n&#039;expose aucune API au développeur PHP.
  </p>

  <p class="para">
    Pour plus de détails sur le pilote PDO de MySQL, voir 
    <a href="ref.pdo-mysql.php" class="xref">Pilote PDO MySQL</a>.
  </p>

  <p class="para" id="mysqli.overview.mysqlnd">
    <strong>Qu&#039;est-ce que le pilote natif MySQL de PHP ?</strong>
  </p>

  <p class="para">
    Pour communiquer avec le serveur MySQL, l&#039;extension
    <code class="literal">mysqli</code> et le pilote
    PDO MYSQL utilisent tous une bibliothèque bas niveau qui implémente
    le protocole MySQL. Par le passé, la seule bibliothèque disponible
    était la <code class="literal">MySQL Client Library</code>, 
    aussi appelée <code class="literal">libmysqlclient</code>.
  </p>

  <p class="para">
    Cependant, l&#039;interface présentée par <code class="literal">libmysqlclient</code> n&#039;était
    pas optimisée pour les communications avec PHP, et 
    <code class="literal">libmysqlclient</code> était conçue à l&#039;origine en C, pour des
    applications de même type. Pour cette raison, le pilote MySQL natif
    <code class="literal">mysqlnd</code> a été développé comme une alternative à 
    <code class="literal">libmysqlclient</code> pour les applications PHP.
  </p>

  <p class="para">
   L&#039;extension <code class="literal">mysqli</code> et le pilote MySQL natif peuvent
   tous deux être configurés individuellement pour utiliser soit
    <code class="literal">libmysqlclient</code> soit <code class="literal">mysqlnd</code>. Comme
    <code class="literal">mysqlnd</code> a été conçu spécifiquement pour utiliser le système
    PHP, il propose de nombreux avantages et améliorations par rapport à 
    <code class="literal">libmysqlclient</code>. On est vivement encouragés à en profiter.
  </p>

  <p class="para">
    Le MySQL Native Driver est implémenté sur la base du framework
    d&#039;extension PHP. Le code source est dans 
    <var class="filename">ext/mysqlnd</var>. Il n&#039;expose aucune nouvelle API
    au développeur PHP.
  </p>



  <p class="para">
    <strong>Comparaison des fonctionnalités</strong>
  </p>

  <p class="para">
    La table suivante compare les fonctionnalités des méthodes 
    principales pour se connecter à MySQL depuis PHP : 
  </p>

  <table id="mysqli.overview.option.comparison" class="doctable table">
   <caption><strong>Comparaison des options MySQL API pour PHP</strong></caption>
    
      <col width="34*" />
      <col width="33*" />
      <col width="33*" />
      <thead>
        <tr>
          <th class="empty">&nbsp;</th>
          <th>Extension mysqli</th>
          <th>PDO (avec le pilote PDO MySQL Driver et MySQL Native Driver)</th>
        </tr>

      </thead>

      <tbody class="tbody">
        <tr>
          <td>Version d&#039;introduction en PHP</td>
          <td>5.0</td>
          <td>5.0</td>
        </tr>

        <tr>
          <td>Statut de développement MySQL</td>
          <td>Développement actif</td>
          <td>Développement actif</td>
        </tr>

        <tr>
          <td>L&#039;API supporte les jeux de caractères</td>
          <td>Oui</td>
          <td>Oui</td>
        </tr>

        <tr>
          <td>L&#039;API supporte les commandes préparées</td>
          <td>Oui</td>
          <td>Oui</td>
        </tr>

        <tr>
          <td>L&#039;API supporte les commandes préparées coté client</td>
          <td>Non</td>
          <td>Oui</td>
        </tr>

        <tr>
          <td>L&#039;API supporte les procédures stockées</td>
          <td>Oui</td>
          <td>Oui</td>
        </tr>

        <tr>
          <td>L&#039;API supporte les commandes multiples</td>
          <td>Oui</td>
          <td>La plupart</td>
        </tr>

        <tr>
          <td>Toutes les fonctionnalités MySQL 4.1 et plus récent</td>
          <td>Oui</td>
          <td>La plupart</td>
        </tr>

      </tbody>
    
  </table>


</div>
<?php manual_footer($setup); ?>