<?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 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'pdo.connections.php',
    1 => 'Conex&otilde;es e gerenciamento de conex&otilde;es',
    2 => 'Conex&otilde;es e gerenciamento de conex&otilde;es',
  ),
  'up' => 
  array (
    0 => 'book.pdo.php',
    1 => 'PDO',
  ),
  'prev' => 
  array (
    0 => 'pdo.constants.fetch-modes.php',
    1 => 'Modos de Busca',
  ),
  'next' => 
  array (
    0 => 'pdo.transactions.php',
    1 => 'Transa&ccedil;&otilde;es e confirma&ccedil;&atilde;o autom&aacute;tica (auto-commit)',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    '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">Conexões e gerenciamento de conexões</h1>

 <p class="para">
  As conexões são estabelecidas criando instâncias da classe base PDO.
  Não importa qual driver você deseja usar; você sempre usa o nome da
  classe PDO. O construtor aceita parâmetros para especificar a
  fonte do banco de dados (conhecida como DSN) e opcionalmente para o nome de usuário e
  senha (se houver).
 </p>
 <p class="para">
  <div class="example" id="example-1">
   <p><strong>Exemplo #1 Conectando-se ao 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">
  Se houver algum erro de conexão, um objeto <code class="literal">PDOException</code>
  será lançado. Você pode capturar a exceção se quiser lidar com a
  condição de erro, ou pode optar por deixá-la para um manipulador de exceção
  global do aplicativo que você configurou via
  <span class="function"><a href="function.set-exception-handler.php" class="function">set_exception_handler()</a></span>.
 </p>
 <p class="para">
  <div class="example" id="example-2"><p><strong>Exemplo #2 Tratando erros de conexão</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">// tentar reconectar após algum intervalo, por exemplo<br /></span><span style="color: #007700">}</span></span></code></div>
   </div>

  </div>
 </p>
 <div class="warning"><strong class="warning">Aviso</strong>
  <p class="para">
   Assim como qualquer outra <a href="language.exceptions.php" class="link">exceção</a>,
   <span class="classname"><a href="class.pdoexception.php" class="classname">PDOException</a></span> pode ser capturada explicitamente, via
   uma instrução <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>, ou implicitamente através de <span class="function"><a href="function.set-exception-handler.php" class="function">set_exception_handler()</a></span>.
   Caso contrário, o comportamento padrão de converter uma exceção não capturada em um
   <strong><code>E_FATAL_ERROR</code></strong> ocorrerá.
   O erro fatal conterá uma rastreabilidade que pode vazar detalhes da conexão.
   Portanto, a opção <var class="filename">php.ini</var>
   <a href="errorfunc.configuration.php#ini.display-errors" class="link"><code class="literal">display_errors</code></a>
   deve ser definida como <code class="literal">0</code> em um servidor de produção.
  </p>
 </div>
 <p class="para">
  Após a conexão bem-sucedida com o banco de dados, uma instância da classe PDO
  é retornada para seu script. A conexão permanece ativa pelo
  tempo de vida desse objeto PDO. Para fechar a conexão, você precisa
  destruir o objeto garantindo que todas as referências restantes a ele sejam
  deletadas - você faz isso atribuindo <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> à variável que mantém o
  objeto. Se você não fizer isso explicitamente, o PHP fechará automaticamente
  a conexão quando seu script terminar.
 </p>
 <blockquote class="note"><p><strong class="note">Nota</strong>: 
  <span class="simpara">
   Se ainda houver outras referências a esta instância PDO (como de uma
   instância PDOStatement, ou de outras variáveis referenciando a mesma
   instância PDO), estas também devem ser removidas (por exemplo, atribuindo <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> à
   variável que referencia a instância PDOStatement).
  </span>
 </p></blockquote>
 <p class="para">
  <div class="example" id="example-3">
   <p><strong>Exemplo #3 Fechando uma conexão</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">// use a conexão aqui<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">// e agora terminamos; feche-a<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">
  Muitas aplicações web se beneficiarão com a realização de conexões persistentes
  com servidores de banco de dados. As conexões persistentes não são fechadas no final do
  script, mas são armazenadas em cache e reutilizadas quando outro script solicita uma conexão
  usando as mesmas credenciais. O cache de conexão persistente permite evitar a sobrecarga
  de estabelecer uma nova conexão toda vez que um script precisa se comunicar com um banco de dados,
  resultando em uma aplicação web mais
  rápida.
 </p>
 <p class="para">
  <div class="example" id="example-4">
   <p><strong>Exemplo #4 Conexões persistentes</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">
  O valor da opção <strong><code><a href="pdo.constants.php#pdo.constants.attr-persistent">PDO::ATTR_PERSISTENT</a></code></strong> é convertido para
  <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> (ativar/desativar conexões persistentes), a menos que seja uma
  <span class="type"><a href="language.types.string.php" class="type string">string</a></span> não numérica, caso em que permite usar vários pools de conexões persistentes.
  Isso é útil se diferentes conexões usam configurações incompatíveis, por exemplo,
  valores diferentes 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">Nota</strong>: 
  <p class="para">
   Se desejar usar conexões persistentes, você deve definir
   <strong><code><a href="pdo.constants.php#pdo.constants.attr-persistent">PDO::ATTR_PERSISTENT</a></code></strong> no array de opções do driver
   passadas para o construtor PDO. Se definir este atributo com
   <span class="methodname"><a href="pdo.setattribute.php" class="methodname">PDO::setAttribute()</a></span> após a instanciação do
   objeto, o driver não usará conexões persistentes.
  </p>
 </p></blockquote>
 <div class="warning"><strong class="warning">Aviso</strong>
  <p class="para">
   O PDO não realiza nenhuma limpeza de conexões persistentes. Tabelas temporárias, bloqueios, transações e outras alterações de estado
   podem permanecer do uso anterior da conexão, causando problemas inesperados. Consulte a seção
   <a href="features.persistent-connections.php" class="link">Conexões de Banco de Dados Persistentes</a> para obter mais informações.
  </p>
 </div>
 <blockquote class="note"><p><strong class="note">Nota</strong>: 
  <p class="para">
   Se estiver usando o driver PDO ODBC e suas bibliotecas ODBC suportarem
   Pool de Conexões ODBC (unixODBC e Windows são duas que suportam; pode haver
   mais), então é recomendável que você não use conexões PDO
   persistentes e, em vez disso, deixe o cache de conexão para a camada de
   Pool de Conexões ODBC. O Pool de Conexões ODBC é compartilhado com outros
   módulos no processo; se o PDO for instruído a armazenar em cache a conexão,
   então essa conexão nunca seria retornada ao pool de conexões ODBC,
   resultando em conexões adicionais sendo criadas para atender a esses outros
   módulos.
  </p>
 </p></blockquote>
</div>
<?php manual_footer($setup); ?>