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:
pgsqlEklentisi: 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_assocgibi) bir dizi fonksiyon sunar. Geliştiricilere PostgreSQL’in özel işlevlerini kullanma imkanı tanır.PDO_PGSQLSü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_dbadında bir veritabanı oluşturduğunuz varsayılmaktadır.servbay_useradında bir kullanıcı tanımlayıp, şifresiniyour_passwordolarak belirlediğinizi ve bu kullanıcıyaservbay_dbüzerinde gerekli yetkileri verdiğinizi varsayalım.servbay_dbiçinde,usersadı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
<?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 = "pgsql@servbay.demo";
$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);
?>1
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
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
<?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 = 'pdo_pgsql@servbay.demo';
$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
?>1
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
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:
pgsqleklentisi, PostgreSQL’e özgü fonksiyonlar sunar (pg_connect,pg_query_paramsgibi). Eğer PostgreSQL’in kendine has özelliklerinden kapsamlı biçimde yararlanmanız gerekecekse, bu yaklaşım daha doğrudur.PDO_PGSQLise 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_PGSQLkullanmanız önerilir. Mevcut/Eski projeleri sürdürüyorsanız veya özelpgsqlişlevlerine ihtiyacınız varsa,pgsqleklentisini 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.1veyalocalhostolur. - 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.
