<?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 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'mysqlinfo.concepts.buffering.php',
    1 => 'Consultas com buffer e sem buffer',
    2 => 'Consultas com buffer e sem buffer',
  ),
  'up' => 
  array (
    0 => 'mysqlinfo.concepts.php',
    1 => 'Conceitos',
  ),
  'prev' => 
  array (
    0 => 'mysqlinfo.concepts.php',
    1 => 'Conceitos',
  ),
  'next' => 
  array (
    0 => 'mysqlinfo.concepts.charset.php',
    1 => 'Conjuntos de caracteres',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    '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">Consultas com buffer e sem buffer</h2>

  <p class="simpara">
   As consultas usam o modo de buffer por padrão. Isso significa que os resultados da consulta são
   imediatamente transferidos do servidor MySQL para o PHP e então mantidos na memória
   do processo PHP. Isso permite operações adicionais, como contar o
   número de linhas e mover (buscar) o ponteiro do resultado atual. Também permite
   emitir consultas adicionais na mesma conexão enquanto trabalha no conjunto de resultados.
   A desvantagem do modo buffer é que conjuntos de resultados maiores podem exigir
   bastante memória. A memória será mantida ocupada até que todas as referências ao
   conjunto de resultados sejam desativadas ou o conjunto de resultados seja explicitamente liberado, o que acontecerá
   automaticamente durante o término da solicitação, o mais tardar. A terminologia &quot;armazenar resultado&quot; também é usada
   para o modo buffer, pois todo o conjunto de resultados é armazenado de uma só vez.
  </p>

  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span class="simpara">
    Ao usar a libmysqlclient como biblioteca, o limite de memória do PHP não contará a memória usada
    para conjuntos de resultados, a menos que os dados sejam buscados em variáveis ​​PHP. Com o mysqlnd
    a memória contabilizada incluirá o conjunto completo de resultados.
   </span>
  </p></blockquote>

  <p class="simpara">
   Consultas MySQL sem buffer executam a consulta e aguardam
   que os dados do servidor MySQL sejam buscados. Isso usa menos memória
   do lado do PHP, mas pode aumentar a carga no servidor. A menos que o conjunto completo de resultados tenha sido
   obtido do servidor, nenhuma consulta adicional poderá ser enviada pela mesma conexão. Consultas
   sem buffer também podem ser chamadas de &quot;resultado de uso&quot;. Depois que todas as linhas do conjunto de resultados
   forem buscadas, o conjunto de resultados desaparecerá e não poderá ser iterado novamente.
  </p>

  <p class="simpara">
   Seguindo essas características, consultas sem buffer devem ser utilizadas apenas
   quando se espera um grande conjunto de resultados que será processado sequencialmente.
   As consultas sem buffer contêm uma série de armadilhas que tornam mais
   difícil seu uso, por exemplo, o número de linhas no conjunto de resultados é desconhecido
   até que a última linha seja obtida.
   Consultas em buffer são a maneira mais fácil e flexível de processar conjuntos de resultados.
  </p>

  

  <p class="simpara">
   Como as consultas em buffer são o padrão, os exemplos abaixo demonstrarão como
   executar consultas sem buffer com cada API.
  </p>

  <div class="example" id="example-1">
   <p><strong>Exemplo #1 Exemplo de consulta sem buffer: 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>Exemplo #2 Exemplo de consulta sem buffer: 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); ?>