ServBay’de PHP PostgreSQL Eklentisi Kullanımı (pgsql, PDO_PGSQL)
ServBay, güçlü ve entegre bir yerel Web geliştirme ortamı olarak, PostgreSQL veritabanı desteğini yerleşik bir şekilde sunar ve PHP için gerekli eklentileri sağlar. Böylece geliştiriciler, PHP uygulamalarında PostgreSQL veritabanına kolayca bağlanıp işlemler gerçekleştirebilir. ServBay, desteklediği tüm PHP sürümleri için pgsql
ve PDO_PGSQL
eklentilerini önceden kurulu ve varsayılan olarak etkin şekilde sunar.
PHP PostgreSQL Eklentisine Genel Bakış
PostgreSQL, güçlü ve açık kaynak kodlu bir nesne-ilişkisel veritabanı sistemidir ve kararlılığı, veri bütünlüğü ve zengin özellik setiyle bilinir. PHP’den PostgreSQL ile etkileşim kurmak için uygun PHP eklentilerine ihtiyaç vardır. ServBay iki temel eklenti sağlar:
pgsql
Eklentisi: PHP’nin PostgreSQL için yerel eklentisidir, doğrudan PostgreSQL veritabanını yönetmek içinpg_
ile başlayan (pg_connect
,pg_query
,pg_fetch_assoc
gibi) bir dizi fonksiyon sunar. Geliştiricilere PostgreSQL’in özel işlevlerini kullanma imkanı tanır.PDO_PGSQL
Sürücüsü: PHP Data Objects (PDO) eklentisinin bir parçasıdır ve özellikle PostgreSQL bağlantısı için kullanılır. PDO, farklı veritabanlarıyla (PostgreSQL, MySQL, SQLite ve daha fazlası) tutarlı bir API ile etkileşime geçmeyi sağlayan bir soyutlama katmanı sunar ve kodun taşınabilirliğini artırır.
ServBay’de PHP PostgreSQL Eklentisi
ServBay, desteklediği her PHP sürümüne pgsql
eklentisi ve PDO_PGSQL
sürücüsünü önceden kurar ve bu eklentiler varsayılan olarak etkinleşmiş haldedir.
PostgreSQL Eklentisi Nasıl Etkinleştirilir?
ServBay’de, pgsql
veya PDO_PGSQL
eklentilerini manuel olarak etkinleştirmeniz gerekmez. Tüm ayarlar sizin için hazırdır; doğrudan PHP kodunuzda kullanabilirsiniz.
PHP Kodunda PostgreSQL Kullanımı
Gerekli eklentiler etkinleştirildikten sonra, PHP kodunuzda pgsql
fonksiyonları veya PDO nesnesi kullanarak PostgreSQL veritabanı ile bağlantı kurabilir ve işlemler yapabilirsiniz.
Ön Koşullar:
- ServBay’de PostgreSQL servisini çalıştırıyor olmalısınız.
servbay_db
adında bir veritabanı oluşturduğunuz varsayılmaktadır.servbay_user
adında bir kullanıcı tanımlayıp, şifresiniyour_password
olarak belirlediğinizi ve bu kullanıcıyaservbay_db
üzerinde gerekli yetkileri verdiğinizi varsayalım.servbay_db
içinde,users
adında ve şu sütunlara sahip bir tablo olduğunu varsayalım:id
(SERIAL PRIMARY KEY),name
(VARCHAR),email
(VARCHAR),age
(INT).
Bu işlemleri ServBay’in yerleşik adminer aracı veya DBeaver, pgAdmin gibi diğer veritabanı yönetim araçlarıyla tamamlayabilirsiniz.
Aşağıda, iki farklı yöntemle (pgsql ve PDO_PGSQL) veritabanına bağlanıp temel işlemlerin nasıl yapılacağını gösteren örnek kodlar bulunmaktadır:
Örnek Kod (pgsql
Yöntemiyle)
<?php
// --- pgsql eklentisi örneği ---
// Veritabanı bağlantı parametreleri
$host = "127.0.0.1"; // veya 'localhost'
$port = "5432"; // PostgreSQL’in varsayılan portu
$dbname = "servbay_db";
$user = "servbay_user";
$password = "your_password"; // Buraya kendi şifrenizi girin
// Bağlantı dizesini oluştur
$conn_string = "host={$host} port={$port} dbname={$dbname} user={$user} password={$password}";
// PostgreSQL veritabanına bağlan
$conn = pg_connect($conn_string);
// Bağlantı başarılı mı kontrol et
if (!$conn) {
die("pgsql Bağlantı başarısız: " . pg_last_error());
}
echo "pgsql Başarıyla bağlandı<br>";
// Veri ekleme (Not: pg_query doğrudan parametre bağlamayı desteklemez, SQL enjeksiyonuna karşı koruma için el ile kaçış yapılmalı veya pg_query_params kullanılmalı)
$name = "ServBay Pgsql";
$email = "[email protected]";
$age = 7;
// Güvenli, parametreli sorgu için pg_query_params kullanımı
$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: Yeni kayıt başarılı şekilde eklendi<br>";
} else {
echo "pgsql Hatası: " . pg_last_error($conn) . "<br>";
}
// Veri sorgulama
$query = "SELECT id, name, email, age FROM users WHERE name = $1";
$result = pg_query_params($conn, $query, array('ServBay Pgsql'));
if ($result) {
echo "pgsql Sorgulanan veriler:<br>";
// Sonuç satırı var mı kontrol et
if (pg_num_rows($result) > 0) {
// Bütün satırları ilişkisel dizi olarak al
$data = pg_fetch_all($result, PGSQL_ASSOC);
foreach ($data as $row) {
echo "id: " . $row["id"]. " - Ad: " . $row["name"]. " - E-posta: " . $row["email"]. " - Yaş: " . $row["age"]. "<br>";
}
} else {
echo "pgsql: 0 sonuç bulundu<br>";
}
} else {
echo "pgsql Veri sorgusu sırasında hata: " . pg_last_error($conn) . "<br>";
}
// Veritabanı bağlantısını kapat
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
Örnek Kod (PDO_PGSQL
Yöntemiyle)
<?php
// --- PDO_PGSQL örneği ---
// Veritabanı bağlantı parametreleri
$host = '127.0.0.1'; // veya 'localhost'
$port = 5432; // PostgreSQL’in varsayılan portu
$dbname = 'servbay_db';
$username = 'servbay_user';
$password = 'your_password'; // Buraya kendi şifrenizi girin
// PostgreSQL için DSN (Veri Kaynağı Adı)
$dsn = "pgsql:host=$host;port=$port;dbname=$dbname";
// PDO bağlantı seçenekleri
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // Hatalarda uyarı yerine istisna fırlat
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Varsayılanı ilişkisel dizi olarak al
// PDO::ATTR_EMULATE_PREPARES => false, // PostgreSQL için genellikle gerek yoktur
];
try {
// Yeni bir PDO bağlantı örneği oluştur
$pdo = new PDO($dsn, $username, $password, $options);
echo "PDO_PGSQL Başarıyla bağlandı<br>";
// Veri ekleme (hazırlanmış ifade ile)
$sql = "INSERT INTO users (name, email, age) VALUES (:name, :email, :age)";
$stmt = $pdo->prepare($sql);
$name = 'ServBay PDO Pgsql';
$email = '[email protected]';
$age = 12;
// Parametreleri bağlayıp çalıştır
$stmt->execute([
':name' => $name,
':email' => $email,
':age' => $age
]);
echo "PDO_PGSQL: Yeni kayıt başarılı şekilde eklendi<br>";
// Veri sorgulama
$stmt = $pdo->prepare("SELECT id, name, email, age FROM users WHERE name = :name");
$stmt->execute([':name' => 'ServBay PDO Pgsql']);
// Tüm sonuçları al
$users = $stmt->fetchAll(); // Varsayılan olarak FETCH_ASSOC kullanılır
if ($users) {
echo "PDO_PGSQL Sorgulanan veriler:<br>";
foreach ($users as $row) {
echo "id: " . $row['id'] . " - Ad: " . $row['name'] . " - E-posta: " . $row['email'] . " - Yaş: " . $row['age'] . "<br>";
}
} else {
echo "PDO_PGSQL: 0 sonuç bulundu<br>";
}
} catch (\PDOException $e) {
// Bağlantı veya sorgu hatalarını yakala ve göster
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
// PDO bağlantısı genelde betik bitiminde otomatik kapanır, özellikle kapatmanız gerekmez
// $pdo = null; // İsterseniz bağlantıyı kapatmak için null atayabilirsiniz
?>
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
Kodun Kullanılması: Yukarıdaki örnek kodlardan herhangi birini .php
uzantılı bir dosya olarak kaydedin (ör: pg_test_native.php
veya pg_test_pdo.php
) ve ServBay’iniz altındaki web sitenizin kök dizinine (ör: /Applications/ServBay/www/myproject/
) yükleyin. Ardından kodu tarayıcınızda uygun URL ile çalıştırabilirsiniz (ör: http://myproject.servbay.demo/pg_test_native.php
). Siteniz ile PostgreSQL servisi ServBay’de düzgün şekilde yapılandırılmış ve çalışıyor olmalıdır.
Sıkça Sorulan Sorular (SSS)
S: ServBay’de PHP’nin PostgreSQL eklentisini (pgsql
veya PDO_PGSQL
) el ile kurmam gerekir mi?
C: Gerekmiyor. ServBay, yönettiği tüm PHP sürümleri için pgsql
ve PDO_PGSQL
eklentilerini önceden kurulmuş ve etkinleştirilmiş şekilde sunar. Doğrudan kodunuzda kullanabilirsiniz, ek bir kurulum ya da ayar gerektirmez.
S: pgsql
eklentisi ile PDO_PGSQL
sürücüsü arasında ne fark var? Hangisini tercih etmeliyim?
C:
pgsql
eklentisi, PostgreSQL’e özgü fonksiyonlar sunar (pg_connect
,pg_query_params
gibi). Eğer PostgreSQL’in kendine has özelliklerinden kapsamlı biçimde yararlanmanız gerekecekse, bu yaklaşım daha doğrudur.PDO_PGSQL
ise PDO soyutlama katmanının bir parçasıdır. Kodunuzun taşınabilir olması ve ileride MySQL gibi başka veritabanlarına geçiş sırasında daha az değişiklik gerektirmesi için idealdir. Ayrıca PDO, her zaman hazırlıklı sorgu kullanımını zorunlu kılar; bu da modern PHP geliştirme için güvenli ve önerilen bir yöntemdir.- Tavsiye: Yeni projeler veya kod taşınabilirliği ve güvenliğine önem verdiğiniz projeler için
PDO_PGSQL
kullanmanız önerilir. Mevcut/Eski projeleri sürdürüyorsanız veya özelpgsql
işlevlerine ihtiyacınız varsa,pgsql
eklentisini kullanabilirsiniz.
S: ServBay’deki PostgreSQL servisine bağlanmak için gereken bilgileri (host, port, kullanıcı adı, şifre, veritabanı adı) nasıl bulurum?
C:
- Host (Sunucu Adı): Genellikle
127.0.0.1
veyalocalhost
olur. - Port: PostgreSQL’in standart portu
5432
’dir. ServBay PostgreSQL paket yönetimi ekranından güncel portu görebilirsiniz. - Kullanıcı Adı / Şifre / Veritabanı Adı: PostgreSQL servisi altında kendiniz oluşturursunuz. ServBay’in adminer aracı veya pgAdmin, DBeaver gibi istemci yazılımlarla yeni veritabanı, kullanıcı ve hak atamalarını kolayca yapabilirsiniz.
S: pgsql
eklentisiyle SQL enjeksiyonunu nasıl önleyebilirim?
C: Kullanıcıdan alınan girdileri doğrudan SQL sorgu dizesine eklemekten kaçının. Bunun yerine, sorgu ve parametreleri ayrı aktarmanıza olanak tanıyan pg_query_params()
fonksiyonunu kullanın. Ya da, pg_query()
kullanmak zorundaysanız, kullanıcı girdilerini güvenlik için pg_escape_string()
veya pg_escape_literal()
ile kaçışlayın (ancak çoğu durumda pg_query_params
daha doğrudur).
Sonuç
ServBay, PHP’nin pgsql
ve PDO_PGSQL
eklentilerini önceden kurulu ve etkin şekilde getirerek macOS’ta yerel geliştirme ortamınızda PHP ile PostgreSQL ilişkisini benzersiz kolaylığa kavuşturur. Eklenti kurulumu veya ek yapılandırmaya ihtiyaç duymadan, yalnızca proje ihtiyacınıza uygun istediğiniz eklentiyi (daha iyi taşınabilirlik ve güvenlik için PDO önerilir) seçerek ServBay yönetimindeki PostgreSQL servisine doğrudan erişebilirsiniz. Böylece geliştiriciler, uygulama mantığına odaklanıp PostgreSQL’in tüm zenginliğinden tam anlamıyla faydalanarak güvenilir web uygulamaları oluşturabilirler.