<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/book.pdo.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'pdo.connections.php',
    1 => 'Connexions et gestionnaire de connexion',
    2 => 'Connexions et gestionnaire de connexion',
  ),
  'up' => 
  array (
    0 => 'book.pdo.php',
    1 => 'PDO',
  ),
  'prev' => 
  array (
    0 => 'pdo.constants.fetch-modes.php',
    1 => 'Modes de r&eacute;cup&eacute;ration',
  ),
  'next' => 
  array (
    0 => 'pdo.transactions.php',
    1 => 'Transactions et validation automatique (autocommit)',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'reference/pdo/connections.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="pdo.connections" class="chapter">
 <h1 class="title">Connexions et gestionnaire de connexion</h1>

 <p class="para">
  Les connexions sont établies en créant des instances de la classe de base de PDO.
  Peu importe quel pilote l&#039;on veut utiliser ; l&#039;on utilise toujours le nom
  de la classe PDO. Le constructeur accepte des paramètres pour spécifier
  la source de la base de données (connue en tant que DSN) et optionnellement,
  le nom d&#039;utilisateur et le mot de passe (s&#039;il y en a un).
 </p>
 <p class="para">
  <div class="example" id="example-1">
   <p><strong>Exemple #1 Connexion à MySQL</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$dbh </span><span style="color: #007700">= new </span><span style="color: #0000BB">PDO</span><span style="color: #007700">(</span><span style="color: #DD0000">'mysql:host=localhost;dbname=test'</span><span style="color: #007700">, </span><span style="color: #0000BB">$user</span><span style="color: #007700">, </span><span style="color: #0000BB">$pass</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div> 
   </div>

  </div>
 </p>
 <p class="para">
  S&#039;il y a des erreurs de connexion, un objet <code class="literal">PDOException</code>
  est lancé. Il est possible d&#039;attraper cette exception pour gérer
  cette erreur, ou laisser le gestionnaire global d&#039;exception défini
  via la fonction <span class="function"><a href="function.set-exception-handler.php" class="function">set_exception_handler()</a></span> la traiter.
 </p>
 <p class="para">
  <div class="example" id="example-2">
   <p><strong>Exemple #2 Gestion des erreurs de connexion</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">try {<br />    </span><span style="color: #0000BB">$dbh </span><span style="color: #007700">= new </span><span style="color: #0000BB">PDO</span><span style="color: #007700">(</span><span style="color: #DD0000">'mysql:host=localhost;dbname=test'</span><span style="color: #007700">, </span><span style="color: #0000BB">$user</span><span style="color: #007700">, </span><span style="color: #0000BB">$pass</span><span style="color: #007700">);<br />} catch (</span><span style="color: #0000BB">PDOException $e</span><span style="color: #007700">) {<br />    </span><span style="color: #FF8000">// tenter de réessayer la connexion après un certain délai, par exemple<br /></span><span style="color: #007700">}</span></span></code></div>
   </div>

  </div>
 </p>
 <div class="warning"><strong class="warning">Avertissement</strong>
  <p class="para">
   Comme toutes les autres <a href="language.exceptions.php" class="link">exceptions</a>,
   <span class="classname"><a href="class.pdoexception.php" class="classname">PDOException</a></span> peut être capturée soit explicitement, par
   une instruction <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>, soit implicitement via <span class="function"><a href="function.set-exception-handler.php" class="function">set_exception_handler()</a></span>.
   Sinon, le comportement par défaut consistant à convertir une exception non capturée en une
   <strong><code>E_FATAL_ERROR</code></strong> se produira.
   L&#039;erreur fatale contiendra un backtrace qui peut laisser échapper des détails sur la connexion.
   Ainsi, l&#039;option <var class="filename">php.ini</var> <a href="errorfunc.configuration.php#ini.display-errors" class="link"><code class="literal">display_errors</code></a>
   doit être définie à <code class="literal">0</code> sur un serveur de production.
  </p>
 </div>
 <p class="para">
  Lorsque la connexion à la base de données a réussi, une instance de la classe
  PDO est retournée au script. La connexion est active tant que l&#039;objet PDO
  l&#039;est. Pour clore la connexion, il faut détruire l&#039;objet en s&#039;assurant que
  toutes ses références sont effacées. Il est possible de faire cela en assignant <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>
  à la variable gérant l&#039;objet. Si on ne le fait pas explicitement, PHP fermera
  automatiquement la connexion lorsque le script arrivera à la fin.
 </p>
 <blockquote class="note"><p><strong class="note">Note</strong>: 
  <span class="simpara">
   S&#039;il existe encore d&#039;autres références à cette instance PDO (par exemple, à 
   partir d&#039;une instance PDOStatement ou d&#039;autres variables référençant la 
   même instance PDO), celles-ci doivent également être supprimées (par 
   exemple, en affectant <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> à la variable qui référence le PDOStatement).
  </span>
 </p></blockquote>
 <p class="para">
  <div class="example" id="example-3">
   <p><strong>Exemple #3 Fermeture d&#039;une connexion</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$dbh </span><span style="color: #007700">= new </span><span style="color: #0000BB">PDO</span><span style="color: #007700">(</span><span style="color: #DD0000">'mysql:host=localhost;dbname=test'</span><span style="color: #007700">, </span><span style="color: #0000BB">$user</span><span style="color: #007700">, </span><span style="color: #0000BB">$pass</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// utiliser la connexion ici<br /></span><span style="color: #0000BB">$sth </span><span style="color: #007700">= </span><span style="color: #0000BB">$dbh</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #DD0000">'SELECT * FROM foo'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// et maintenant, on la ferme !<br /></span><span style="color: #0000BB">$sth </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$dbh </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="para">
  Beaucoup d&#039;applications web utilisent des connexions persistantes aux serveurs
  de base de données. Les connexions persistantes ne sont pas fermées à la fin du
  script, mais sont mises en cache et réutilisées lorsqu&#039;un autre script demande une connexion
  en utilisant les mêmes paramètres. Le cache des connexions persistantes
  permet d&#039;éviter d&#039;établir une nouvelle connexion à chaque fois qu&#039;un
  script doit accéder à une base de données, rendant l&#039;application web plus rapide.
 </p>
 <p class="para">
  <div class="example" id="example-4">
   <p><strong>Exemple #4 Connexions persistantes</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$dbh </span><span style="color: #007700">= new </span><span style="color: #0000BB">PDO</span><span style="color: #007700">(</span><span style="color: #DD0000">'mysql:host=localhost;dbname=test'</span><span style="color: #007700">, </span><span style="color: #0000BB">$user</span><span style="color: #007700">, </span><span style="color: #0000BB">$pass</span><span style="color: #007700">, array(<br />    </span><span style="color: #0000BB">PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">ATTR_PERSISTENT </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">true<br /></span><span style="color: #007700">));<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="para">
  La valeur de l&#039;option <strong><code><a href="pdo.constants.php#pdo.constants.attr-persistent">PDO::ATTR_PERSISTENT</a></code></strong> est convertie
  en <a href="language.types.boolean.php" class="link">booléen</a> (activer/désactiver les connexions persistantes), sauf si c&#039;est
  une <a href="language.types.string.php" class="link">chaîne de caractères</a> non-numérique, auquel cas ceci autorise l&#039;utilisation de
  plusieurs pools de connexions persistantes.
  Ceci est utile si les connexions différentes utilisent des paramètres
  incompatibles, par exemple, des valeurs différentes de
  <strong><code><a href="ref.pdo-mysql.php#pdo.constants.mysql-attr-use-buffered-query">PDO::MYSQL_ATTR_USE_BUFFERED_QUERY</a></code></strong>.
 </p>
 <blockquote class="note"><p><strong class="note">Note</strong>: 
  <p class="para">
   Pour utiliser des connexions persistantes, il faut
   utiliser la valeur <strong><code><a href="pdo.constants.php#pdo.constants.attr-persistent">PDO::ATTR_PERSISTENT</a></code></strong> dans le
   tableau des options du pilote passé au constructeur PDO. Si l&#039;on
   définit cet attribut avec la méthode <span class="methodname"><a href="pdo.setattribute.php" class="methodname">PDO::setAttribute()</a></span>
   après l&#039;instanciation de l&#039;objet, le pilote n&#039;utilisera pas les connexions
   persistantes.
  </p>
 </p></blockquote>
  <div class="warning"><strong class="warning">Avertissement</strong>
  <p class="para">
   PDO ne fait aucun nettoyage des connexions persistantes. Les tables temporaires, verrous, transactions et autres
   changements d&#039;état peuvent rester de l&#039;utilisation précédente de la connexion, causant des problèmes inattendus. Voir la
   section <a href="features.persistent-connections.php" class="link">Connexions de base de données persistantes</a> pour plus d&#039;informations.
  </p>
 </div>
 <blockquote class="note"><p><strong class="note">Note</strong>: 
  <p class="para">
   Lors de l&#039;utilisation du pilote PDO ODBC et que la bibliothèque ODBC prend en charge
   le bassin de connexion ODBC (unixODBC et Windows le supportent tous les deux ;
   peut être plus), alors il est recommandé de ne pas utiliser les connexions persistantes
   PDO, mais plutôt laisser le bassin de connexion ODBC mettre en cache les connexions.
   Le bassin de connexion ODBC est partagé avec les autres modules dans le processus ;
   si PDO met en cache la connexion, alors cette connexion ne sera jamais retournée
   par le bassin de connexion ODBC, faisant que plusieurs connexions sont créées pour
   les autres modules.
  </p>
 </p></blockquote>
</div>
<?php manual_footer($setup); ?>