Utilizando as Extensões PHP PostgreSQL (pgsql, PDO_PGSQL) no ServBay
O ServBay é um poderoso ambiente integrado de desenvolvimento web local que já vem com suporte ao banco de dados PostgreSQL e fornece as extensões necessárias para que os desenvolvedores possam conectar e manipular bancos PostgreSQL facilmente em suas aplicações PHP. O ServBay pré-instala e habilita por padrão as extensões pgsql
e PDO_PGSQL
para todas as versões PHP suportadas.
Visão Geral das Extensões PHP para PostgreSQL
O PostgreSQL é um sistema de banco de dados relacional, open source, extremamente robusto, conhecido por sua estabilidade, integridade de dados e conjunto completo de recursos. Para interagir com um banco PostgreSQL a partir do PHP, são necessárias extensões específicas. O ServBay oferece duas principais opções:
- Extensão
pgsql
: Esta é a extensão nativa do PHP para PostgreSQL e oferece uma série de funções prefixadas porpg_
(comopg_connect
,pg_query
,pg_fetch_assoc
, etc.) para operar diretamente em bancos PostgreSQL. Permite acessar recursos específicos do PostgreSQL. - Driver
PDO_PGSQL
: Faz parte da extensão PHP Data Objects (PDO), dedicada à conexão com bancos PostgreSQL. A PDO fornece uma camada de abstração unificada para o acesso a diversos bancos de dados (incluindo PostgreSQL, MySQL, SQLite, etc.), facilitando a criação de código mais portátil.
Extensões PHP PostgreSQL no ServBay
O ServBay já traz o driver PDO_PGSQL
e a extensão pgsql
pré-instalados e garante que estejam habilitados por padrão para cada versão PHP suportada.
Como Habilitar as Extensões PostgreSQL
No ServBay, você não precisa realizar nenhuma configuração manual para habilitar as extensões pgsql
ou PDO_PGSQL
. Elas já estão prontas para o uso imediato diretamente no seu código PHP.
Utilizando PostgreSQL em Código PHP
Com as extensões já ativas, você pode usar as funções nativas do pgsql
ou os objetos PDO para conectar e manipular bancos de dados PostgreSQL no seu código PHP.
Pré-requisitos:
- Você precisa estar com o serviço PostgreSQL rodando no ServBay.
- Ter um banco chamado
servbay_db
previamente criado. - Ter um usuário chamado
servbay_user
com senhayour_password
, e com permissões adequadas sobre o bancoservbay_db
. - Assumir que existe na base
servbay_db
uma tabela chamadausers
com os camposid
(SERIAL PRIMARY KEY),name
(VARCHAR),email
(VARCHAR) eage
(INT).
Você pode realizar essas configurações usando o adminer integrado do ServBay ou por meio de outras ferramentas de gerenciamento de bancos de dados, como DBeaver e pgAdmin.
Abaixo, exemplos de como conectar ao banco e executar operações básicas em ambas as formas:
Exemplo de Código (usando a extensão pgsql
)
<?php
// --- Exemplo de uso da extensão pgsql ---
// Parâmetros de conexão do banco
$host = "127.0.0.1"; // Ou 'localhost'
$port = "5432"; // Porta padrão do PostgreSQL
$dbname = "servbay_db";
$user = "servbay_user";
$password = "your_password"; // Substitua pela sua senha real
// Monta a string de conexão
$conn_string = "host={$host} port={$port} dbname={$dbname} user={$user} password={$password}";
// Conecta ao banco PostgreSQL
$conn = pg_connect($conn_string);
// Verifica se a conexão foi bem-sucedida
if (!$conn) {
die("pgsql Connection failed: " . pg_last_error());
}
echo "pgsql Connected successfully<br>";
// Inserindo dados (obs.: pg_query não suporta binding de parâmetros diretamente; para evitar SQL Injection utilize pg_query_params)
$name = "ServBay Pgsql";
$email = "[email protected]";
$age = 7;
// Consulta parametrizada segura com pg_query_params
$query = "INSERT INTO users (name, email, age) VALUES ($1, $2, $3)";
$result = pg_query_params($conn, $query, array($name, $email, $age));
if ($result) {
echo "pgsql: New record created successfully<br>";
} else {
echo "pgsql Error: " . pg_last_error($conn) . "<br>";
}
// Consultando dados
$query = "SELECT id, name, email, age FROM users WHERE name = $1";
$result = pg_query_params($conn, $query, array('ServBay Pgsql'));
if ($result) {
echo "pgsql Queried data:<br>";
// Checa se houve retorno de linhas
if (pg_num_rows($result) > 0) {
// Obtém todas as linhas como array associativo
$data = pg_fetch_all($result, PGSQL_ASSOC);
foreach ($data as $row) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. " - Age: " . $row["age"]. "<br>";
}
} else {
echo "pgsql: 0 results found<br>";
}
} else {
echo "pgsql Error querying data: " . pg_last_error($conn) . "<br>";
}
// Fecha a conexão com o banco
pg_close($conn);
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Exemplo de Código (usando PDO_PGSQL
)
<?php
// --- Exemplo com PDO_PGSQL ---
// Parâmetros de conexão
$host = '127.0.0.1'; // Ou 'localhost'
$port = 5432; // Porta padrão do PostgreSQL
$dbname = 'servbay_db';
$username = 'servbay_user';
$password = 'your_password'; // Substitua pela sua senha real
// Data Source Name (DSN) para PostgreSQL
$dsn = "pgsql:host=$host;port=$port;dbname=$dbname";
// Opções para PDO
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // Gera exceções ao invés de avisos
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Busca padrão como array associativo
// PDO::ATTR_EMULATE_PREPARES => false, // Geralmente não é necessário para PostgreSQL
];
try {
// Cria a instância de conexão PDO
$pdo = new PDO($dsn, $username, $password, $options);
echo "PDO_PGSQL Connected successfully<br>";
// Inserindo dados (com prepared statement)
$sql = "INSERT INTO users (name, email, age) VALUES (:name, :email, :age)";
$stmt = $pdo->prepare($sql);
$name = 'ServBay PDO Pgsql';
$email = '[email protected]';
$age = 12;
// Executa bind dos parâmetros e executa
$stmt->execute([
':name' => $name,
':email' => $email,
':age' => $age
]);
echo "PDO_PGSQL: New record created successfully<br>";
// Consulta
$stmt = $pdo->prepare("SELECT id, name, email, age FROM users WHERE name = :name");
$stmt->execute([':name' => 'ServBay PDO Pgsql']);
// Busca todos os resultados
$users = $stmt->fetchAll(); // FETCH_ASSOC por padrão
if ($users) {
echo "PDO_PGSQL Queried data:<br>";
foreach ($users as $row) {
echo "id: " . $row['id'] . " - Name: " . $row['name'] . " - Email: " . $row['email'] . " - Age: " . $row['age'] . "<br>";
}
} else {
echo "PDO_PGSQL: 0 results found<br>";
}
} catch (\PDOException $e) {
// Captura e exibe erro de conexão ou consulta
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
// A conexão PDO normalmente fecha automaticamente ao final do script, não é necessário chamar close()
// $pdo = null; // Pode-se setar explicitamente como null para fechar
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Colocando o código em funcionamento: Salve qualquer um dos exemplos acima como um arquivo .php
(exemplo: pg_test_native.php
ou pg_test_pdo.php
) e coloque na raiz do seu site no ServBay (por exemplo, /Applications/ServBay/www/myproject/
). Depois, acesse a respectiva URL pelo navegador (exemplo: http://myproject.servbay.demo/pg_test_native.php
). Certifique-se de que seu site e o serviço PostgreSQL estejam corretamente configurados e em execução no ServBay.
Perguntas Frequentes (FAQ)
Q: Preciso instalar manualmente as extensões PHP PostgreSQL (pgsql
ou PDO_PGSQL
) no ServBay?
A: Não. O ServBay já vem com as extensões pgsql
e o driver PDO_PGSQL
pré-instalados e habilitados para todas as versões PHP que ele gerencia. Você pode usá-los imediatamente, sem qualquer instalação ou configuração adicional.
Q: Qual a diferença entre a extensão pgsql
e o driver PDO_PGSQL
? Qual devo utilizar?
A:
- A extensão
pgsql
fornece um conjunto de funções específicas do PostgreSQL (comopg_connect
,pg_query_params
). Se você precisa de recursos particulares do PostgreSQL, ela é mais direta. - O
PDO_PGSQL
faz parte da camada de abstração PDO. Usar PDO possibilita um código mais portável entre diferentes bancos. Além disso, o PDO força o uso de prepared statements, que é considerado boa prática de segurança no PHP moderno. - Recomendação: Para novos projetos, ou quando se busca portabilidade e segurança, prefira usar
PDO_PGSQL
. Já para manutenção de código legado ou quando requer funções específicas dopgsql
, opte por essa extensão.
Q: Como posso obter as informações de conexão (host, porta, usuário, senha, nome do banco) para acessar o PostgreSQL do ServBay?
A:
- Host: Normalmente será
127.0.0.1
oulocalhost
. - Porta: A padrão do PostgreSQL é
5432
. Confira na interface de gerenciamento do PostgreSQL no ServBay para confirmar. - Usuário / Senha / Nome do banco: São definidos por você ao criar o banco e o usuário no serviço PostgreSQL. Utilize o adminer do ServBay ou outra ferramenta como pgAdmin ou DBeaver para gerenciar banco, usuários, senhas e permissões.
Q: Como evitar SQL Injection ao usar a extensão pgsql
?
A: Jamais concatene diretamente entradas do usuário em strings SQL. Use sempre a função pg_query_params()
para consultas parametrizadas, pois ela separa instruções SQL dos parâmetros, tornando a consulta segura. Alternativamente, pode-se usar pg_escape_string()
ou pg_escape_literal()
antes de chamar pg_query()
, mas a abordagem com pg_query_params
é a mais recomendada.
Conclusão
O ServBay simplifica ao máximo o processo de conectar aplicações PHP a bancos PostgreSQL em ambientes macOS locais, com as extensões pgsql
e PDO_PGSQL
já pré-instaladas e habilitadas. Assim, desenvolvedores não precisam se preocupar com instalação e configuração de drivers — basta escolher a extensão adequada às demandas do seu projeto (com recomendação para PDO sempre que possível para maior compatibilidade e segurança) e acessar os bancos PostgreSQL gerenciados pelo ServBay. Isso permite que você mantenha o foco na lógica da aplicação e explore todo o potencial do PostgreSQL para construir aplicações web robustas e confiáveis.