<?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 => 'es',
  ),
  'this' => 
  array (
    0 => 'mysqli.persistconns.php',
    1 => 'La extensi&oacute;n mysqli y las conexiones persistentes',
    2 => 'La extensi&oacute;n mysqli y las conexiones persistentes',
  ),
  'up' => 
  array (
    0 => 'book.mysqli.php',
    1 => 'MySQLi',
  ),
  'prev' => 
  array (
    0 => 'mysqli.configuration.php',
    1 => 'Configuraci&oacute;n en tiempo de ejecuci&oacute;n',
  ),
  'next' => 
  array (
    0 => 'mysqli.constants.php',
    1 => 'Constantes predefinidas',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    '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">La extensión mysqli y las conexiones persistentes</h1>


 <p class="para">
  La idea detrás de las conexiones persistentes es que las conexiones
  entre los clientes y la base de datos pueden ser reutilizadas por otro proceso
  cliente, en lugar de ser destruidas y recreadas numerosas veces. Esto reduce
  el coste de creación de conexiones cada vez que una de ellas es requerida,
  ya que las conexiones se almacenan en caché para ser recicladas.
 </p>

 <p class="para">
  A diferencia de la extensión MySQL, MySQLi no proporciona una función
  separada para abrir conexiones persistentes. Para abrir una conexión
  persistente, se debe añadir <code class="literal">p:</code> al nombre del host
  al conectar.
 </p>

 <p class="para">
  El problema de las conexiones persistentes es que pueden ser dejadas
  en un estado impredecible por los clientes. Por ejemplo, un bloqueo de tabla
  puede haber sido puesto antes de que el cliente se desconecte inesperadamente.
  Un nuevo cliente tomará entonces la conexión, pero
  <q class="quote">tal cual</q>. Sería necesario entonces que el nuevo cliente realice
  una limpieza en profundidad de la conexión antes de poder reutilizarla
  sin interferencias, lo cual es una desventaja para el programador.
 </p>

 <p class="para">
  La conexión persistente de la extensión <code class="literal">mysqli</code>
  proporciona un método de limpieza automática. La limpieza es realizada
  por <code class="literal">mysqli</code> e incluye:
 </p>

 <ul class="itemizedlist">

  <li class="listitem">
   <p class="para">
    La cancelación de las transacciones activas.
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    El cierre y destrucción de las tablas temporales.
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    El desbloqueo de las tablas.
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    La restauración de los valores por defecto de las variables de sesión.
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    La liberación de las sentencias preparadas (esto siempre ocurre con PHP).
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    El cierre del manejador.
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    La liberación de los bloqueos puestos por <span class="function"><strong>GET_LOCK()</strong></span>.
   </p>
  </li>

 </ul>

 <p class="para">
  Esto asegura que la conexión persistente está en una condición correcta
  antes de ser devuelta al grupo de conexiones, y que un cliente diferente
  la retome.
 </p>

 <p class="para">
  La extensión <code class="literal">mysqli</code> realiza esta limpieza
  llamando automáticamente a la función C <code class="literal">mysql_change_user()</code>.
 </p>

 <p class="para">
  La limpieza automática tiene sus ventajas e inconvenientes.
  La ventaja es que el programador no necesita preocuparse por ello,
  ya que es llamada automáticamente. Sin embargo, el inconveniente es
  que este código puede <em>finalmente</em> ser un poco más
  lento, ya que debe ser llamado cada vez que la conexión es
  devuelta al grupo de espera.
 </p>

 <p class="para">
  Es posible desactivar la limpieza del código, compilando
  PHP con la opción <strong><code>MYSQLI_NO_CHANGE_USER_ON_PCONNECT</code></strong>.
 </p>

 <blockquote class="note"><p><strong class="note">Nota</strong>: 
  <p class="para">
   La extensión <code class="literal">mysqli</code> soporta las conexiones
   persistentes con el MySQL Native Driver y con la biblioteca
   MySQL.
  </p>
 </p></blockquote>

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