Doctrine DBAL - Database Abstraction Layer
Para instalar a DBAL utilize composer:
composer require doctrine/dbal
Criando uma conexão
Uma conexão com o banco de dados é criada por meio da classe \Doctrine\DBAL\DriverManager
.
$config = new \Doctrine\DBAL\Configuration();
$connectionParams = array(
'dbname' => 'cidades',
'user' => 'sa',
'password' => 'sa',
'host' => 'localhost',
'driver' => 'pdo_sqlsrv',
'charset' => 'utf-8'
);
$db = \Doctrine\DBAL\DriverManager::getConnection($connectionParams, $config);
No trecho de código acima, o método getConnection()
retorna uma conexão com o banco de dados, conforme os parâmetros da conexão ($connectionParams
). Nos parâmetros da conexão, as chaves do array são importantes.
Chave | Descrição |
---|---|
dbname |
O nome do banco de dados |
user |
O nome do usuário da conexão |
password |
A senha do usuário da conexão |
host |
O nome do host do banco de dados |
driver |
O nome do driver da conexão |
charset |
(opcional) A codificação dos dados |
No caso do trecho de código:
- O banco de dados chama-se
cidades
- O nome do usuário e sua senha são
sa
esa
, respectivamente - O nome do host é
localhost
- O nome do driver é
pdo_sqlsrv
- A codificação de caracteres é
utf-8
Se você encontrar problemas utilizando o driver pdo_sqlsrv
, utilize o driver sqlsrv
.
Recuperação e manipulação de dados
Consulta (SELECT)
Uma consulta SQL pode ser executada por meio de uma conexão e do método query()
:
$sql = "SELECT * FROM Cidades";
$query = $db->executeQuery($sql);
$cidades = $query->fetchAll();
A consulta SQL é representada pela variável $sql
(uma string
). O método executeQuery()
cria uma instância de Doctrine\DBAL\Statement
.
O método fetchAll()
retorna todos os registros encontrados, na forma de um array
. Se for necessário iterar pelos resultados, ou se a consulta fornecer apenas um resultado, você pode utilizar o método fetch()
:
$sql = "SELECT * FROM Cidades";
$query = $db->executeQuery($sql);
while ($linha = $query->fetch()) {
echo $linha['nome'];
}
Parâmetros
Embora a consulta SQL seja represenada por uma string, por questões de segurança, não é interessante concatenar valores informados pelo usuário, por exemplo, para filtrar um conjunto de resultados com base em um critério. Assim, deve ser usado o método executeQuery()
de Doctrine\DBAL\Connection
para criar um Statement
:
$sql = "SELECT * FROM Cidades WHERE id = ?";
$query = $db->executeQuery($sql, array(1));
$cidade = $query->fetch();
A instrução SQL possui o símbolo ?
para indicar que deve se recuperado o registro cuja coluna id
corresponde a um valor (ainda não informado).
O método executeQuery()
aceita como parâmetros a instrução SQL e um array
, que contém os valores para os parâmetros da instrução SQL.
Inserindo valores (UPDATE, DELETE, INSERT)
Enquanto o método Connection->executeQuery()
é útil para instruções SELECT, o método Connection->executeUpdate()
, que funciona de maneira idêntica, é indicado para instruções UPDATE, DELETE e INSERT. O método executeUpdate()
retorna a quantidade de linhas afetadas pela execução da instrução.
$sql = "INSERT INTO Estados(nome, uf) VALUES(?, ?)";
$r = $db->executeUpdate($sql, array("Tocantins", "TO"));
A instrução SQL é um INSERT. A variável $r
contém a quantidade de linhas afetadas pela execução da instrução SQL. No caso de uma instrução INSERT isso quer dizer que se $r > 0
, então os dados foram inseridos. Caso contrário, $r == 0
.