<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/mysqlinfo.concepts.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'mysqlinfo.concepts.buffering.php',
    1 => 'Requ&ecirc;tes mises ou non en m&eacute;moire tampon',
    2 => 'Requ&ecirc;tes mises ou non en m&eacute;moire tampon',
  ),
  'up' => 
  array (
    0 => 'mysqlinfo.concepts.php',
    1 => 'Concepts',
  ),
  'prev' => 
  array (
    0 => 'mysqlinfo.concepts.php',
    1 => 'Concepts',
  ),
  'next' => 
  array (
    0 => 'mysqlinfo.concepts.charset.php',
    1 => 'Jeux de caract&egrave;res',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'reference/mysqlinfo/concepts.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="mysqlinfo.concepts.buffering" class="section">
  <h2 class="title">Requêtes mises ou non en mémoire tampon</h2>

  <p class="simpara">
   Les requêtes utilisent par défaut le mode Mémoire tampon.
   Cela signifie que le résultat des requêtes est immédiatement
   transféré du serveur MySQL à PHP et est ensuite conservé dans la mémoire
   du processus PHP. Cela permet des opérations complémentaires
   comme compter le nombre de résultats, et déplacer le
   pointeur de résultat actuel. Il permet également d&#039;exécuter des
   requêtes supplémentaires sur la même connexion tout en travaillant
   sur le jeu de résultats. L&#039;inconvénient de la mise en mémoire
   tampon est que des jeux de résultats importants peuvent demander
   beaucoup plus de mémoire. La mémoire restera occupée jusqu&#039;à ce
   que toutes les références sur les jeux de résultats soient
   désactivées ou que les jeux de résultats soient explicitement
   libérés, ce qui arrive de manière automatique à la fin du
   processus. La terminologie &quot;store result&quot; est également utilisée
   avec le mode mémoire tampon, vu que la totalité des résultats
   est stockée en une seule fois.
  </p>

  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <span class="simpara">
    Lorsqu&#039;on utilise libmysqlclient comme bibliothèque, la limite
    mémoire de PHP ne comptera pas la mémoire utilisée pour les
    jeux de résultats à moins que les données ne soient lues dans les
    variables PHP. Avec mysqlnd, la mémoire utilisée comprendra
    le jeu de résultats complet.
   </span>
  </p></blockquote>

  <p class="simpara">
   Les requêtes n&#039;utilisant pas la mémoire tampon, les requêtes
   MySQL exécutent leur requête et puis attendent
   que les données du serveur MySQL soient récupérées. Cela utilise moins de mémoire
   côté PHP, mais peut augmenter la charge
   sur le serveur. À moins que le jeu de résultats complet ait été
   récupéré depuis le serveur, aucune autre requête ne peut être
   envoyée sur la même connexion. Les requêtes n&#039;utilisant pas la
   mémoire tampon peuvent également faire référence à un
   &quot;use result&quot;. Une fois que toutes les lignes de l&#039;ensemble de résultats
   ont été récupérées, l&#039;ensemble de résultats disparaît et il n&#039;est plus possible de le parcourir à nouveau.
  </p>

  <p class="simpara">
   Suivant ces caractéristiques, les requêtes non mises en mémoire tampon doivent être utilisées uniquement
   lorsqu&#039;on s&#039;attend à obtenir un grand ensemble de résultats qui sera traité séquentiellement.
   Les requêtes non mises en mémoire tampon présentent plusieurs pièges qui les rendent plus
   difficiles à utiliser, par exemple le nombre de lignes dans l&#039;ensemble de résultats n&#039;est pas connu
   avant que la dernière ligne ne soit récupérée.
  </p>

  <p class="simpara">
   En raison du fait que les requêtes sont mises en mémoire tampon
   par défaut, les exemples ci-dessous vont montrer comment
   exécuter des requêtes, avec chaque API, sans mise en mémoire
   tampon.
  </p>

  <div class="example" id="example-1">
   <p><strong>Exemple #1 Exemple de requêtes n&#039;utilisant pas la mémoire tampon : mysqli</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$mysqli  </span><span style="color: #007700">= new </span><span style="color: #0000BB">mysqli</span><span style="color: #007700">(</span><span style="color: #DD0000">"localhost"</span><span style="color: #007700">, </span><span style="color: #DD0000">"my_user"</span><span style="color: #007700">, </span><span style="color: #DD0000">"my_password"</span><span style="color: #007700">, </span><span style="color: #DD0000">"world"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$unbufferedResult </span><span style="color: #007700">= </span><span style="color: #0000BB">$mysqli</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT Name FROM City"</span><span style="color: #007700">, </span><span style="color: #0000BB">MYSQLI_USE_RESULT</span><span style="color: #007700">);<br /><br />foreach (</span><span style="color: #0000BB">$unbufferedResult </span><span style="color: #007700">as </span><span style="color: #0000BB">$row</span><span style="color: #007700">) {<br />    echo </span><span style="color: #0000BB">$row</span><span style="color: #007700">[</span><span style="color: #DD0000">'Name'</span><span style="color: #007700">] . </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>

  <div class="example" id="example-2">
   <p><strong>Exemple #2 Exemple de requêtes n&#039;utilisant pas la mémoire tampon : pdo_mysql</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$pdo </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=world"</span><span style="color: #007700">, </span><span style="color: #DD0000">'my_user'</span><span style="color: #007700">, </span><span style="color: #DD0000">'my_password'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$pdo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setAttribute</span><span style="color: #007700">(</span><span style="color: #0000BB">PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">MYSQL_ATTR_USE_BUFFERED_QUERY</span><span style="color: #007700">, </span><span style="color: #0000BB">false</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$unbufferedResult </span><span style="color: #007700">= </span><span style="color: #0000BB">$pdo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT Name FROM City"</span><span style="color: #007700">);<br />foreach (</span><span style="color: #0000BB">$unbufferedResult </span><span style="color: #007700">as </span><span style="color: #0000BB">$row</span><span style="color: #007700">) {<br />    echo </span><span style="color: #0000BB">$row</span><span style="color: #007700">[</span><span style="color: #DD0000">'Name'</span><span style="color: #007700">] . </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

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