<?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 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'mysqli.persistconns.php',
    1 => 'A extens&atilde;o mysqli e conex&otilde;es persistentes',
    2 => 'A extens&atilde;o mysqli e conex&otilde;es persistentes',
  ),
  'up' => 
  array (
    0 => 'book.mysqli.php',
    1 => 'MySQLi',
  ),
  'prev' => 
  array (
    0 => 'mysqli.configuration.php',
    1 => 'Configura&ccedil;&otilde;es em Execu&ccedil;&atilde;o',
  ),
  'next' => 
  array (
    0 => 'mysqli.constants.php',
    1 => 'Constantes predefinidas',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    '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">A extensão mysqli e conexões persistentes</h1>


 <p class="para">
  A ideia por trás das conexões persistentes é
  que uma conexão entre um processo cliente e um banco de dados pode ser
  reutilizada por um processo cliente, em vez de ser criada e destruída
  várias vezes. Isso reduz a sobrecarga de criar novas conexões
  sempre que uma é necessária, pois as conexões não utilizadas
  são armazenadas em cache e estão prontas para serem reutilizadas.
 </p>

 <p class="para">
  Ao contrário da extensão mysql, mysqli não fornece uma função separada
  para abrir conexões persistentes. Para abrir uma conexão persistente,
  você deve preceder <code class="literal">p:</code> ao nome do host ao conectar.
 </p>

 <p class="para">
  O problema com conexões persistentes é que elas podem ser deixadas em
  estados imprevisíveis pelos clientes. Por exemplo, um bloqueio de tabela
  pode ser ativado antes que um cliente seja encerrado inesperadamente. Um novo
  processo cliente reutilizando essa conexão persistente obterá a conexão
  <q class="quote">como está</q>. Qualquer limpeza precisaria ser feita pelo novo
  processo cliente antes que ele pudesse fazer bom uso da conexão ]
  persistente, aumentando a carga do programador.
 </p>

 <p class="para">
  A conexão persistente da extensão <code class="literal">mysqli</code>,
  no entanto, fornece código de manipulação de limpeza integrado. A limpeza
  realizada pelo <code class="literal">mysqli</code> inclui:
 </p>

 <ul class="itemizedlist">

  <li class="listitem">
   <p class="para">
    Reverter transações ativas
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    Fechar e descartar tabelas temporárias
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    Desbloquear tabelas
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    Redefinir variáveis de sessão
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    Fechar declarações preparadas (sempre acontece com PHP)
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    Fechar manipulador
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    Liberar bloqueios adquiridos com <span class="function"><strong>GET_LOCK()</strong></span>
   </p>
  </li>

 </ul>

 <p class="para">
  Isso garante que as conexões persistentes estejam em um estado limpo ao
  retornar do pool de conexões, antes que o processo do cliente as use.
 </p>

 <p class="para">
  A extensão <code class="literal">mysqli</code> faz essa limpeza
  chamando automaticamente a função C-API
  <code class="literal">mysql_change_user()</code>.
 </p>

 <p class="para">
  O recurso de limpeza automática tem vantagens e desvantagens.
  A vantagem é que o programador não precisa mais se preocupar em
  adicionar código de limpeza, pois ele é chamado automaticamente. No entanto, a
  desvantagem é que o código pode ser um <em>pouco</em>
  mais lento, pois o código para executar a limpeza precisa ser executado
  sempre que uma conexão é retornada do pool de conexões.
 </p>

 <p class="para">
  É possível desligar o código de limpeza automática, compilando o
  PHP com

  <strong><code>MYSQLI_NO_CHANGE_USER_ON_PCONNECT</code></strong>

  definido.
 </p>

 <blockquote class="note"><p><strong class="note">Nota</strong>: 
  <p class="para">
   A extensão <code class="literal">mysqli</code> suporta conexões
   persistentes ao usar MySQL Native Driver ou MySQL Client
   Library.
  </p>
 </p></blockquote>

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