ServBay'de Yerleşik SQLite Veritabanı Modülüyle PHP Geliştirme
ServBay, geliştiriciler için tasarlanmış güçlü bir yerel web geliştirme ortamıdır ve çeşitli teknoloji yığınlarını destekler. Yerleşik SQLite modülü sayesinde, PHP uygulamalarınızda SQLite veritabanı kullanımı son derece kolay ve hızlı hale gelir. Bu makalede, ServBay'de bu özelliği en verimli şekilde nasıl kullanabileceğiniz detaylıca anlatılmaktadır.
SQLite Modülüne Genel Bakış
SQLite, hafif ve gömülü bir ilişkisel veritabanı yönetim sistemidir. Geleneksel istemci/sunucu tabanlı veritabanlarının (ör. MySQL, PostgreSQL) aksine, SQLite ayrı bir sunucu sürecine ihtiyaç duymaz, doğrudan program içine bir kütüphane olarak entegre edilir. Tüm veritabanı tek bir dosyada tutulur, bu da dağıtım ve yönetimi büyük ölçüde kolaylaştırır.
Aşağıdaki özellikleri sayesinde SQLite yaygın olarak tercih edilir; özellikle küçük ve orta ölçekli uygulamalar, yerel önbellekleme, mobil uygulamalar ile geliştirme ve test ortamları için çok uygundur:
Temel Özellikler
- Hafif: Çekirdek kütüphanesi oldukça küçüktür ve düşük kaynak tüketir.
- Sıfır Konfigürasyon: Sunucu kurulumu, yapılandırma veya kullanıcı yönetimi gerekmez, doğrudan kullanılmaya başlanabilir.
- Yüksek Performans: Çoğu okuma işlemi ve orta düzeydeki yazma yüklerinde mükemmel performans sunar.
- Tek Dosya Deposu: Tüm veritabanı
.sqlite
uzantılı tek bir dosyada saklanır; yedekleme, taşıma ve yönetim kolaydır. - ACID İşlem Desteği: Güvenilir işlem yönetimi ile veri bütünlüğü ve tutarlılığı garanti altındadır.
- Çoklu Platform Desteği: Farklı işletim sistemleri ve programlama dilleriyle kullanılabilir.
ServBay'de SQLite Desteği
ServBay birden fazla PHP sürümünü entegre olarak sunar ve bu sürümlerle uyumlu sqlite3
ve pdo_sqlite
gibi SQLite eklentileri önceden kurulu ve varsayılan olarak etkin halde gelir. Yani ekstra yükleme, derleme veya yapılandırma gerektirmez; PHP projelerinizde doğrudan SQLite'ı kullanmaya başlayabilirsiniz.
Ön Koşullar
- ServBay'in macOS üzerinde kurulmuş ve çalışıyor olması.
- İstediğiniz PHP sürümünün ServBay içinde etkin olması.
- Web sitesi dosyalarını koyacağınız bir klasörünüz olmalı; varsayılan olarak
/Applications/ServBay/www
veya alt klasörlerini kullanmanız tavsiye edilir.
ServBay'de SQLite Nasıl Kullanılır?
ServBay ile SQLite modülü zaten varsayılan olarak etkin olduğundan, ekstra bir kurulum ya da etkinleştirme adımı gerekmemektedir. PHP ortamı hazırdır ve doğrudan SQLite ile ilgili fonksiyonları ve sınıfları çağırabilirsiniz.
SQLite Eklentisinin Etkin Olduğunu Nasıl Kontrol Ederim:
SQLite eklentisinin başarıyla yüklendiğini doğrulamak için phpinfo()
çıktısını kontrol edebilirsiniz.
<?php phpinfo(); ?>
içeren bir PHP dosyası oluşturun (ör.info.php
).- Bu dosyayı ServBay ana web klasörünüzdeki bir site klasörüne yerleştirin (ör.
/Applications/ServBay/www/servbay.demo/info.php
). - Tarayıcıda bu dosyayı açın (ör.
http://servbay.demo/info.php
). - Çıktıda "sqlite" ya da "pdo_sqlite" ifadelerini arayın. İlgili konfigürasyon bölümlerini görüyorsanız, eklenti başarıyla yüklenmiş demektir.
PHP Koduyla SQLite Kullanımı
SQLite eklenik olarak kullanılabilir olduğu için, PHP uygulamanızda doğrudan SQLite API’lerini kullanarak veritabanı işlemlerini gerçekleştirebilirsiniz. En yaygın yöntemler: SQLite3
sınıfı (nesne tabanlı) ve PDO
(PHP Data Objects) kullanımıdır.
Aşağıda, ServBay ortamında bu iki yöntem ile bağlantı oluşturma, tablo yaratma, veri ekleme ve sorgulama işlemlerine dair temel örnekler bulunmaktadır. Bu PHP dosyalarını ve oluşan .sqlite
veritabanı dosyalarını, projenizin içindeki bir klasörde tutmanız tavsiye edilir (ör. /Applications/ServBay/www/your-project-name/
).
Örnek Kod (Standart SQLite3 Kullanımı)
Bu yöntem, PHP'nin yerleşik SQLite3
sınıfını kullanarak SQLite veritabanı ile nesne yönelimli bir arayüz sağlar.
<?php
// Veritabanı dosya yolu
// Veritabanı dosyasını web projesinin bir alt klasöründe (ör. data/) tutmanız önerilir.
$db_file = __DIR__ . '/data/servbay_demo.sqlite'; // __DIR__ mevcut skriptin bulunduğu dizini gösterir.
// Veri klasörünün varlığını doğrula
if (!is_dir(__DIR__ . '/data')) {
mkdir(__DIR__ . '/data', 0777, true);
}
// SQLite veritabanına bağlan
// Dosya mevcut değilse, SQLite otomatik olarak oluşturur
try {
$db = new SQLite3($db_file);
echo "Veritabanı bağlantısı başarılı: " . $db_file . "\n";
} catch (Exception $e) {
die("Veritabanına bağlanılamadı: " . $e->getMessage());
}
// Tablo oluştur
// IF NOT EXISTS ile tekrar oluşturma hatasından kaçınılır
$create_table_sql = "CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL,
age INTEGER
)";
if ($db->exec($create_table_sql)) {
echo "'users' tablosu oluşturuldu veya zaten mevcut\n";
} else {
echo "Tablo oluşturma başarısız: " . $db->lastErrorMsg() . "\n";
}
// Veri ekleme
$name = 'ServBay Demo User';
$email = '[email protected]';
$age = 30;
// SQL enjeksiyonunu önlemek için hazırlıklı ifade kullan
$stmt = $db->prepare("INSERT INTO users (name, email, age) VALUES (:name, :email, :age)");
$stmt->bindValue(':name', $name, SQLITE3_TEXT);
$stmt->bindValue(':email', $email, SQLITE3_TEXT);
$stmt->bindValue(':age', $age, SQLITE3_INTEGER);
// Eklemeyi gerçekleştir ve başarılı olup olmadığını kontrol et (email UNIQUE, tekrar ekleme hata verir)
if ($stmt->execute()) {
echo "Veri eklendi: Name=" . $name . ", Email=" . $email . "\n";
} else {
// Benzersiz kayıt hatasını kontrol et
if (strpos($db->lastErrorMsg(), 'UNIQUE constraint failed') !== false) {
echo "Veri eklenemedi: Email '" . $email . "' zaten mevcut\n";
} else {
echo "Veri eklenemedi: " . $db->lastErrorMsg() . "\n";
}
}
$stmt->close(); // Hazırlıklı ifadeyi kapat
// Veri sorgulama
$search_name = 'ServBay Demo User';
$query_sql = "SELECT id, name, email, age FROM users WHERE name = :name";
$stmt = $db->prepare($query_sql);
$stmt->bindValue(':name', $search_name, SQLITE3_TEXT);
$result = $stmt->execute();
echo "Sorgu sonuçları:\n";
$found = false;
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
print_r($row);
$found = true;
}
if (!$found) {
echo "Eşleşen veri bulunamadı\n";
}
$result->finalize(); // Sonuç kümesini serbest bırak
$stmt->close(); // Hazırlıklı ifadeyi kapat
// Veritabanı bağlantısını kapat
$db->close();
echo "Veritabanı bağlantısı kapatıldı\n";
?>
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
Örnek Kod (PDO Kullanımı)
PDO (PHP Data Objects), farklı veritabanı sistemlerine aynı işlev adlarıyla bağlanmanızı sağlayan bir veritabanı erişim katmanıdır. PDO ile SQLite'a erişmek hem esneklik hem de geniş veritabanı desteği açısından önerilir.
<?php
// Veritabanı dosya yolu
// Veritabanı dosyasını web projesinin bir alt klasöründe (ör. data/) tutmanız önerilir.
$db_file = __DIR__ . '/data/servbay_demo_pdo.sqlite'; // __DIR__ mevcut skriptin bulunduğu dizini gösterir.
// Veri klasörünün varlığını doğrula
if (!is_dir(__DIR__ . '/data')) {
mkdir(__DIR__ . '/data', 0777, true);
}
try {
// Yeni bir PDO örneği oluştur
// DSN (Data Source Name) formatı: 'sqlite:dosyayolu'
$dsn = 'sqlite:' . $db_file;
$pdo = new PDO($dsn);
// Hata modunu istisna olarak ayarla, kolay hata tespiti için
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Varsayılan fetch modu olarak ilişkisel dizi kullan
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
echo "Veritabanı bağlantısı başarılı: " . $db_file . "\n";
// Tablo oluştur
$create_table_sql = "CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL,
age INTEGER
)";
$pdo->exec($create_table_sql);
echo "'users' tablosu oluşturuldu veya zaten mevcut\n";
// Veri ekleme
$name = 'ServBay PDO User';
$email = '[email protected]';
$age = 35;
// Hazırlıklı ifade kullan
$stmt = $pdo->prepare("INSERT INTO users (name, email, age) VALUES (:name, :email, :age)");
// Eklemeyi gerçekleştir ve başarılı olup olmadığını kontrol et (email UNIQUE, tekrar ekleme hata verir)
try {
$stmt->execute([
':name' => $name,
':email' => $email,
':age' => $age
]);
echo "Veri eklendi: Name=" . $name . ", Email=" . $email . "\n";
} catch (PDOException $e) {
// Benzersiz kayıt hatasını kontrol et (SQLite hata kodu 19)
if ($e->getCode() == '23000' || strpos($e->getMessage(), 'UNIQUE constraint failed') !== false) {
echo "Veri eklenemedi: Email '" . $email . "' zaten mevcut\n";
} else {
throw $e; // Diğer hata tiplerini tekrar fırlat
}
}
$stmt->closeCursor(); // İfade kaynağını serbest bırak
// Veri sorgulama
$search_name = 'ServBay PDO User';
$stmt = $pdo->prepare("SELECT id, name, email, age FROM users WHERE name = :name");
$stmt->execute([':name' => $search_name]);
$data = $stmt->fetchAll(); // Tüm sonuç satırlarını al
echo "Sorgu sonuçları:\n";
if ($data) {
print_r($data);
} else {
echo "Eşleşen veri bulunamadı\n";
}
$stmt->closeCursor(); // İfade kaynağını serbest bırak
} catch (PDOException $e) {
// PDO istisnasını yakala
echo "Veritabanı işlemi başarısız: " . $e->getMessage();
// $e->getCode() ile SQLSTATE hata kodunu da alabilirsiniz
}
// PHP scripti bittiğinde PDO bağlantısını kapamak gerekmez
?>
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
Veritabanı Dosya Konumu Hakkında:
Yukarıdaki örneklerde, veritabanı dosyaları (servbay_demo.sqlite
ve servbay_demo_pdo.sqlite
), ilgili PHP dosyasının bulunduğu dizindeki data/
alt klasöründe oluşturulmaktadır. Örneğin, PHP dosyanız /Applications/ServBay/www/my-servbay-project/index.php
yolunda ise, veritabanı dosyası /Applications/ServBay/www/my-servbay-project/data/
klasöründe oluşacaktır.
Veritabanı dosyasını projenizin bir alt klasöründe tutmak, yönetim ve yedekleme açısından iyi bir uygulamadır. ServBay üzerinde çalışan kullanıcının bu klasöre yazma izni olduğundan emin olun (macOS’taki varsayılan ServBay yapılandırmasında bu genellikle bir sorun oluşturmaz).
Dikkat Edilmesi Gerekenler
- SQLite veritabanı dosyaları hassas veriler içerir; genel erişime açık olmamalıdır. Dosyanın web erişimine açık klasörün dışında tutulması ya da kullanılan sunucunun (ör. Caddy, Nginx)
.sqlite
dosyalarına doğrudan erişimi engelleyecek şekilde yapılandırılması önerilir. Örneklerde göstermek amacıyla ilgili dosya web klasöründe tutulmuştur, fakat üretim ortamında daha sıkı güvenlik tedbirleri almak gerekir. - SQLite, nadiren eş zamanlı yazma gerektiren uygulamalar için uygundur. Yüksek eşzamanlı yazma işlemleri gerekiyorsa, performans sorunları veya kilitlenmeler yaşanabilir. Bu tür uygulamalarda MySQL veya PostgreSQL gibi istemci/sunucu tabanlı veritabanlarını tercih ediniz.
- ServBay varsayılan olarak SQLite eklentilerini etkinleştirir; ancak eğer
phpinfo()
çıktısında ilgili bölümleri göremiyorsanız, ServBay PHP yapılandırmasını kontrol edin veya ServBay hizmetini yeniden başlatmayı deneyin.
Sıkça Sorulan Sorular (SSS)
S: Ayrı bir şekilde SQLite kurmam gerekir mi?
C: Hayır, gerekmez. ServBay’in PHP paketi SQLite eklentisini içermekte ve varsayılan olarak etkin durumda sunulmaktadır, doğrudan PHP kodlarınızda kullanabilirsiniz.
S: .sqlite
veritabanı dosyamı nereye koymalıyım?
C: Daha fazla güvenlik için sitenizin proje klasöründe fakat doğrudan webden ulaşılamayan bir alt klasörde (ör. data/
veya database/
) saklamanız önerilir. Örnek kodlarda __DIR__ . '/data/'
ile relatif yol kullanılmıştır.
S: PHP skriptim neden SQLite veritabanına bağlanamıyor veya dosya oluşturamıyor?
C: Lütfen aşağıdakileri kontrol edin:
- ServBay’in çalıştığından ve PHP dosyanıza ServBay üzerinden eriştiğinizden emin olun.
phpinfo()
çıktısındasqlite3
vepdo_sqlite
eklentilerinin etkin olduğunu kontrol edin.- Veritabanı dosyasının konulduğu klasörün var olduğundan ve ServBay’in çalıştığı kullanıcının yazma iznine sahip olduğundan emin olun.
Özet
ServBay, PHP geliştiricilerine kolay ve güçlü SQLite veritabanı desteği sunar. Varsayılan olarak etkinleştirilen yerleşik SQLite modülleriyle ServBay, yerelde SQLite tabanlı uygulama geliştirme ve test işlemleriniz için hızlı, basit ve konfigürasyon gerektirmeyen bir ortam sağlar. SQLite’ın hafifliği ve pratikliği ile birleşen ServBay, yerel geliştirme sürecinizde vazgeçilmez bir yardımcı haline gelir.