PDO (PHP Data Objects)

Neste conteúdo você aprenderá a configurar o driver de conexão com o Banco de Dados SQL Server da Microsoft e criar uma conexão com esse BD utilizando o PDO (PHP Data Objects) e a linguagem PHP.

Para entender como funciona uma conexão utilizando o PDO, observe a Figura 1:

Conexão utilizando PDO
Figura 1. Conexão utilizando PDO

A extensão PDO define uma interface leve e consistente para acessar bancos de dados em PHP. Cada driver de banco de dados que a implementa pode utilizar os métodos para comunicação com o Banco de Dados. Observe que não é possível executar nenhuma função de banco de dados usando a extensão PDO por si só: você deve usar um driver PDO específico do banco de dados para acessar um servidor.

O PDO fornece uma camada de abstração de acesso a dados, o que significa que, independentemente do banco de dados que você está usando, as funções para emitir consultas e buscar dados são as mesmas. O PDO não fornece uma abstração de banco de dados, ou seja, ele não reescreve o SQL ou simula recursos faltantes. Você deve usar uma camada de abstração completa se precisar dessa facilidade.

Veja na Figura 2 os drivers implementados no PDO.

Drivers suportados pelo PDO conforme a documentação do PHP no site php.net
Figura 2. Drivers suportados pelo PDO conforme a documentação do PHP no site php.net

Agora vamos efetuar o download do driver do SQLServer para PHP no site da Microsoft.

Após efetuar o download, descompacte os arquivos e os copie para o diretório ext, conforme mostra a Figura 3. Como estamos usando o XAMPP, esse arquivo fica localizado em c:\xampp\php.

Copiando os arquivos para diretório c:\xampp\php\ext
Figura 3. Copiando os arquivos para diretório c:\xampp\php\ext

Em seguida, edite o arquivo c:\xampp\php\php.ini inserindo o código abaixo para configurar o driver de conexão com o Banco de Dados:

Versão x86

extension=php_pdo_sqlsrv_73_ts_x86.dll
extension=php_sqlsrv_73_ts_x86.dll

Versão x64

extension=php_pdo_sqlsrv_73_ts_x64.dll
extension=php_sqlsrv_73_ts_x64.dll
Nota: É necessário uma atenção especial ao inserir os drivers, verificando a versão do PHP e se a instalação é do tipo x86 ou x64. Pois php_pdo_sqlsrv_73_ts_x86.dll o '73' deste arquivo refere se a versão do PHP. Então mediante a versão utilizada ele deverá ser inserido corretamente.

A inserção deve ser feita conforme a Figura 4.

Adicionando as linhas dos drivers SQL Server
Figura 4. Adicionando as linhas dos drivers SQL Server

Após efetuar esta configuração você vai reiniciar o seu servidor web (XAMPP) conforme a Figura 5:

Reiniciando o servidor web (XAMPP).
Figura 5. Reiniciando o servidor web (XAMPP).

Para efetuar a conexão com o Banco de Dados SQL Server usaremos o seguinte código.

<?php
   
class Conexao
{
    private static $connection;
   
    private function __construct(){}
  
    public static function getConnection() {
   
        $pdoConfig  = DB_DRIVER . ":". "Server=" . DB_HOST . ";";
        $pdoConfig .= "Database=".DB_NAME.";";
        
        try {
            if(!isset($connection)){
                $connection =  new PDO($pdoConfig, DB_USER, DB_PASSWORD);
                $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            }
            return $connection;
         } catch (PDOException $e) {
            $mensagem = "Drivers disponiveis: " . implode(",", PDO::getAvailableDrivers());
            $mensagem .= "\nErro: " . $e->getMessage();
            throw new Exception($mensagem);
         }
     }
}

Linhas 11 e 12: Aqui temos a string de conexão com BD. No SQL Server é necessário utilizar os parâmetros Server e Database.

Linhas 14 a 24: Criamos a instância do PDO e a retornamos no método getConnection() da classe Conexao.

Veja como vamos utilizar a classe de conexão e efetuar uma consulta trazendo algumas informações do Banco de Dados:

<?php
define('DB_HOST'        , "localhost");
define('DB_USER'        , "sa");
define('DB_PASSWORD'    , "devmedia");
define('DB_NAME'        , "devmedia");
define('DB_DRIVER'      , "sqlsrv");

require_once "Conexao.php";

try{

    $Conexao    = Conexao::getConnection();
    $query      = $Conexao->query("SELECT nome, preco, quantidade FROM produto");
    $produtos   = $query->fetchAll();

 }catch(Exception $e){

    echo $e->getMessage();
    exit;

 }

?>
<!DOCTYPE html>
<html>
<head>
  <title>Conexão PDO SQL Server</title>
</head>
<body>
  <form> 
        <table border=1>
            <tr>
               <td>Nome</td>
               <td>Preço</td>
               <td>Quantidade</td>
            </tr>
            <?php
               foreach($produtos as $produto) {
            ?>
            <tr>
                <td><?php echo $produto['nome']; ?></td>
                <td>R$ <?php echo $produto['preco']; ?></td>
                <td><?php echo $produto['quantidade']; ?></td>
            </tr>
            <?php
               }
            ?>
        </table>
    </form>
</body>
</html>

Linhas 2 a 6: Temos as constantes para definir as configurações de conexão com o Banco de Dados.

Linha 8: Incluímos o arquivo da classe Conexao.

Linhas 10 a 19: Efetuamos a consulta no Banco de Dados. Caso ocorra algum erro será exibida uma mensagem em tela e a aplicação será finalizada.

Linhas 22 a 39: Utilizamos uma estrutura de repetição (foreach) para iterar sobre o resultado do BD e imprimir em tela.

Sugestão de conteúdo