Conexões e gerenciamento de conexões

As conexões são estabelecidas através da criação de instâncias da classe base DOP. Não importa qual o driver que você deseja usar, você sempre usar o nome da classe PDO. O construtor aceita parâmetros para especificar a fonte de dados (conhecido como o DSN) e, opcionalmente, o nome de usuário e senha (se houver).

Exemplo de conexão com MySQL:

Código:

<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
?>


Se houver erros de conexão, um objeto PDOException será lançado. Você pode capturar a exceção, se você deseja lidar com a condição de erro, ou você pode optar por deixá-lo por um manipulador de exceção de aplicações globais que você configurar via set_exception_handler().

Exemplo de manipulação de erros de conexão:

Código:

<?php
try {
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
    foreach($dbh->query('SELECT * from FOO') as $row) {
        print_r($row);
    }
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}
?>



Aviso:
Se sua aplicação não captura a exceção acionada a partir do construtor PDO, a ação padrão tomada pelo Zend Engine é terminar o script e exibir um erro. Este erro provavelmente revelará os detalhes de conexão banco de dados completo, incluindo o nome de usuário e senha. É da sua responsabilidade capturar essa exceção, seja de forma explícita (através de uma instrução catch) ou implicitamente através da função set_exception_handler().

Após a conexão com o banco de dados, uma instância da classe PDO é devolvida ao seu script. A conexão permanece ativa por toda a vida do objeto PDO. Para fechar a conexão, é preciso destruir o objeto, assegurando que todas as demais referências a ele sejam apagadas - você faz isso através da atribuição de NULL para a variável que contém o objeto. Se você não fizer isso explicitamente, o PHP irá fechar automaticamente a conexão quando o script terminar.

Exemplo de fechamento de conexão:

Código:

<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);

// usa a conexão aqui

$dbh = null; // fecha a conexão no final
?>


Muitas aplicações web irão se beneficiar de fazer conexões persistentes para os servidores de banco de dados. Conexões persistentes não são fechadas ao final do script, mas são armazenados em cache e reutilizado quando outro script solicita uma conexão usando as mesmas credenciais. O cache de conexão persistente permite que você evite a sobrecarga de estabelecer uma nova conexão toda vez que um script precisa falar com um banco de dados, resultando em uma aplicação web mais rápida.

Exemplo de conexão persistente:

Código:

<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
    PDO::ATTR_PERSISTENT => true
));
?>


Nota 1:
Se você deseja usar conexões persistentes, você deve definir PDO::ATTR_PERSISTENT no array de opções de driver passado para o construtor PDO. Se você setar este atributo com PDO::setAttribute() após a instanciação do objeto, o script não irá usar conexões persistentes.

Nota 2:
Se você usar o drive PDO ODBC e sua biblioteca ODBC suportar conexão ODBC Pooling (unixODBC e Windows são dois que fazem, pode haver mais), então é recomendado que você não usa conexões persistentes PDO, em vez de deixar o cache de conexão para a camada de conexão ODBC Pooling.

Até ;-)