<?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.persistconns.php',
    1 => 'L\'extension mysqli et les connexions persistantes',
    2 => 'L\'extension mysqli et les connexions persistantes',
  ),
  'up' => 
  array (
    0 => 'book.mysqli.php',
    1 => 'MySQLi',
  ),
  'prev' => 
  array (
    0 => 'mysqli.configuration.php',
    1 => 'Configuration &agrave; l\'ex&eacute;cution',
  ),
  'next' => 
  array (
    0 => 'mysqli.constants.php',
    1 => 'Constantes pr&eacute;-d&eacute;finies',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'reference/mysqli/persistconns.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

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

 <h1 class="title">L&#039;extension mysqli et les connexions persistantes</h1>


 <p class="para">
  L&#039;idée derrière les connexions persistantes est que les connexions
  entre les clients et la base peuvent être réutilisées par un autre processus
  client, au lieu d&#039;être détruites et recréées de nombreuses fois. Cela réduit
  le coût de création des connexions à chaque fois que l&#039;une d&#039;entre elles
  est requise, car les connexions sont mises en cache pour être recyclées.
 </p>
 
 <p class="para">
  Contrairement à l&#039;extension MySQL, MySQLi ne fournit pas de fonction
  séparée pour ouvrir des connexions persistantes. Pour ouvrir une connexion
  persistante, il faut ajouter <code class="literal">p:</code> au nom de l&#039;hôte
  lors de la connexion.
 </p>

 <p class="para">
  Le problème des connexions persistantes est qu&#039;elles peuvent être laissées
  dans un état imprévisible, par les clients. Par exemple, un verrou de table
  peut avoir été posé avant que le client ne se déconnecte inopinément. 
  Un nouveau client va alors prendre la connexion, mais 
  <q class="quote">tel quel</q>. Il faudrait alors que le nouveau venu effectue
  un nettoyage en profondeur de la connexion avant de pouvoir la réutiliser
  sans parasitage, ce qui est un inconvénient pour le programmeur.
 </p>

 <p class="para">
  La connexion persistante de l&#039;extension <code class="literal">mysqli</code> 
  fournit une méthode de nettoyage automatique. Le nettoyage est effectué
  par <code class="literal">mysqli</code> et inclut :
 </p>

 <ul class="itemizedlist">

  <li class="listitem">
   <p class="para">
    L&#039;annulation des transactions actives.
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    La fermeture et destruction des tables temporaires.
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    Le déverrouillage des tables
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    La remise à la valeur par défaut des variables de session
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    La libération des commandes préparées (cela arrive toujours avec PHP)
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    La fermeture du gestionnaire
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    La libération des verrous posés par <span class="function"><strong>GET_LOCK()</strong></span>
   </p>
  </li>

 </ul>

 <p class="para">
  Cela assure que la connexion persistante est dans une condition correcte
  avant d&#039;être remise dans le groupe de connexion, et qu&#039;un client différent
  la reprenne. 
 </p>

 <p class="para">
  L&#039;extension <code class="literal">mysqli</code> effectue ce nettoyage en
  appelant automatiquement la fonction C <code class="literal">mysql_change_user()</code>.
 </p>

 <p class="para">
  Le nettoyage automatique a ses avantages et ses inconvénients.
  L&#039;avantage est que le programmeur n&#039;a pas besoin de s&#039;en inquiéter,
  car il est appelé automatiquement. Cependant, l&#039;inconvénient est 
  que ce code peut <em>éventuellement</em> être un peu plus
  lent, car il doit être appelé à chaque fois que la connexion est 
  retournée dans le groupe d&#039;attente.
 </p>

 <p class="para">
  Il est possible de désactiver le nettoyage du code, en compilant
  PHP avec l&#039;option <strong><code>MYSQLI_NO_CHANGE_USER_ON_PCONNECT</code></strong>.
 </p>

 <blockquote class="note"><p><strong class="note">Note</strong>: 
  <p class="para">
   L&#039;extension <code class="literal">mysqli</code> supporte les connexions
   persistantes avec le MySQL Native Driver et avec la bibliothèque
   MySQL.
  </p>
 </p></blockquote>

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