ServBay'de PHP MySQL Uzantıları (mysqlnd, mysqli, PDO) Kullanımı
ServBay, güçlü ve entegre bir yerel Web geliştirme ortamı olarak, PHP uygulamanızın veritabanı ile olan etkileşimini büyük ölçüde kolaylaştırır. ServBay, desteklediği tüm PHP sürümleri için önemli MySQL veritabanı uzantılarını önceden yüklü ve varsayılan olarak etkin biçimde sunar: mysqlnd, mysqli ve PDO_MySQL. Yani, MySQL veya MariaDB veritabanlarıyla veri işlemleri yapmak için ek bir yapılandırma yapmanız gerekmez; doğrudan projenize entegre edip kullanmaya başlayabilirsiniz.
ServBay'de Mevcut PHP MySQL Uzantıları
ServBay, yönettiği PHP ortamında aşağıdaki üç popüler MySQL uzantısını gömülü olarak sunar ve bu, uyumluluk ve performans açısından güven sağlar:
- MySQL Yerel Sürücü (
mysqlnd): PHP'nin C diliyle yazılmış yerel sürücüsüdür;mysqlivePDO_MySQLuzantılarının temelini oluşturur. MySQL/MariaDB sunucuları ile iletişimi sağlar ve genellikle daha iyi performans ve bellek yönetimi sunar. - MySQLi (
mysqli): Geliştirilmiş MySQL Uzantısı. Hem nesne yönelimli, hem prosedürel API sunar. Özellikle MySQL ve MariaDB'ye bağlanmak için geliştirilmiştir. Hazır ifadeler (prepared statements), işlemler, saklı prosedürler ve çoklu sorgu desteği gibi gelişmiş özellikleri destekler. - PDO MySQL (
PDO_MySQL): PHP Data Objects (PDO) için MySQL sürücüsüdür. PDO, geliştiricilere; MySQL, MariaDB, PostgreSQL, SQLite gibi farklı veritabanlarıyla aynı API üzerinden çalışma olanağı sağlayan, veri tabanı erişimi için birleşik bir soyutlama katmanı sunar. Kod taşınabilirliğini artırır.
Etkinlik Durumu
ServBay'de mysqlnd, mysqli ve PDO_MySQL uzantıları, tüm PHP sürümlerinde varsayılan olarak etkindir. Bunları etkinleştirmek için ek bir işlem yapmanız gerekmez. ServBay, ilgili php.ini yapılandırmasını sizin yerinize halleder ve doğrudan kodunuzda bu uzantıları kullanarak veritabanına bağlanabilirsiniz.
PHP MySQL Uzantılarını Detaylı Tanıyalım
Bu üç uzantı arasındaki farkları bilmek, projeniz için en uygun seçimi yapmanıza yardımcı olur:
MySQL Yerel Sürücü (
mysqlnd)- Temel Amacı:
mysqlnd, PHP ile MySQL/MariaDB veritabanı sunucuları arasındaki iletişimi sağlayan, C diliyle yazılmış bir PHP yerel sürücüsüdür. - Başlıca Özellikleri: PHP 5.3’ten itibaren,
mysqlndvarsayılan olarakmysqlivePDO_MySQLuzantılarının temel katmanı olmuştur. PHP’nin içine doğrudan entegre edilir ve ek bir MySQL istemcisine (libmysqlclientgibi) ihtiyaç duymaz. - Avantajları: Eski
libmysqlclientkütüphanesine kıyasla daha iyi performans, verimli bellek kullanımı, asenkron sorgular, gelişmiş kalıcı bağlantı yönetimi ve zengin eklenti desteği sunar.mysqlnd’nin API’sini doğrudan kullanmazsınız; avantajlarındanmysqliya daPDOile otomatik olarak faydalanırsınız.
- Temel Amacı:
MySQLi (
mysqli)- Temel Amacı: Yalnızca MySQL (4.1.3 ve sonrası) ve MariaDB ile çalışmak üzere geliştirilmiştir.
- Başlıca Özellikleri: Hem nesne yönelimli, hem prosedürel programlama arayüzü sunar. Hazır ifadeler (SQL enjeksiyonuna karşı güçlü koruma), işlem yönetimi, saklı prosedürler ve çoklu sorgu yürütme gibi MySQL/MariaDB'nin modern işlevlerini destekler.
- Avantajları: Özellikle MySQL/MariaDB’ye özgü gelişmiş özelliklerden faydalanmak, optimize ve performans odaklı kod yazmak isteyenler için idealdir. Sadece bu veritabanlarını kullanacaksanız,
mysqligüvenilir bir seçimdir.
PDO MySQL (
PDO_MySQL)- Temel Amacı: PDO, farklı veritabanlarıyla aynı arayüz üzerinden çalışmaya olanak sağlayan hafif ve tutarlı bir veri tabanı erişim API’sidir.
PDO_MySQL, MySQL ve MariaDB’ye özel sürücüdür. - Başlıca Özellikleri: Birleşik API ile (
PDO,PDOStatementsınıfları) veritabanı işlemleri; yalnızca hazır ifadelerin kullanılması (prepare/execute), bu da SQL enjeksiyonunu önlemek için oldukça etkilidir. İşlem (transaction) desteği. - Avantajları: Veritabanı taşınabilirliği konusunda öne çıkar. Uygulamanız ileride PostgreSQL, SQLite veya başka bir veritabanına taşınacaksa kod değişiklikleri minimuma iner. Nesne yönelimli ve modern bir API sunar; kodunuzu daha temiz ve güvenli yazabilirsiniz. Yeni projeler için sıklıkla PDO önerilir.
- Temel Amacı: PDO, farklı veritabanlarıyla aynı arayüz üzerinden çalışmaya olanak sağlayan hafif ve tutarlı bir veri tabanı erişim API’sidir.
PHP Kod Örnekleri: Veritabanına Bağlanma ve İşlem Yapma
Aşağıda, ServBay üzerinde yönetilen bir MariaDB veya MySQL veritabanına (servbay_db varsayılmıştır) bağlanmak ve temel işlemleri gerçekleştirmek için hem mysqli hem de PDO ile örnek PHP kodları bulabilirsiniz.
Ön koşullar:
- ServBay üzerinde çalışan bir MySQL ya da MariaDB servisine sahip olmalısınız.
servbay_dbadında bir veritabanı oluşturdunuz.servbay_useradında, şifresiyour_passwordolan veservbay_dbüzerinde uygun yetkilere sahip bir kullanıcı yarattınız.servbay_dbveritabanınızdausersadlı bir tablo bulunuyor ve bu tabloda şu sütunlar var:id(INT, PK, AI),name(VARCHAR),email(VARCHAR),age(INT).
Bunların ayarlarını ServBay’in dahili phpMyAdmin’i veya başka bir veritabanı yönetim aracı ile gerçekleştirebilirsiniz.
Kod Örneği (mysqli ile)
php
<?php
// --- mysqli örneği ---
// Veritabanı bağlantı parametreleri
$servername = "127.0.0.1"; // veya 'localhost'
$port = 3306; // ServBay'de MySQL/MariaDB'nin varsayılan portu
$username = "servbay_user";
$password = "your_password"; // Gerçek şifrenizle değiştirin
$dbname = "servbay_db";
// Nesne yönelimli mysqli bağlantısı oluştur
$conn = new mysqli($servername, $username, $password, $dbname, $port);
// Bağlantı başarılı mı kontrol et
if ($conn->connect_error) {
die("mysqli Connection failed: " . $conn->connect_error);
}
echo "mysqli Connected successfully<br>";
// Veri ekleme (hazır ifadesi kullanarak SQL enjeksiyonunu önler)
$stmt = $conn->prepare("INSERT INTO users (name, email, age) VALUES (?, ?, ?)");
$name = "ServBay Demo";
$email = "mysqli@servbay.demo";
$age = 5;
// "ssi" sırasıyla string, string, integer anlamına gelir
$stmt->bind_param("ssi", $name, $email, $age);
if ($stmt->execute()) {
echo "mysqli: New record created successfully<br>";
} else {
echo "mysqli Error: " . $stmt->error . "<br>";
}
$stmt->close();
// Veri sorgulama
$sql = "SELECT id, name, email, age FROM users WHERE name = 'ServBay Demo'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo "mysqli Queried data:<br>";
// Veriyi ekrana bas
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. " - Age: " . $row["age"]. "<br>";
}
} else {
echo "mysqli: 0 results found<br>";
}
// Bağlantıyı kapat
$conn->close();
?>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
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
Kod Örneği (PDO ile)
php
<?php
// --- PDO örneği ---
// Veritabanı bağlantı parametreleri
$host = '127.0.0.1'; // veya 'localhost'
$port = 3306; // ServBay'de MySQL/MariaDB'nin varsayılan portu
$dbname = 'servbay_db';
$username = 'servbay_user';
$password = 'your_password'; // Gerçek şifrenizle değiştirin
$charset = 'utf8mb4';
// Veri kaynağı (DSN)
$dsn = "mysql:host=$host;port=$port;dbname=$dbname;charset=$charset";
// PDO bağlantı seçenekleri
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // Uyarı yerine istisna fırlat
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Varsayılan olarak ilişkilendirilmiş dizi döndür
PDO::ATTR_EMULATE_PREPARES => false, // Gerçek (native) hazır deyimler kullan
];
try {
// PDO bağlantı örneği oluştur
$pdo = new PDO($dsn, $username, $password, $options);
echo "PDO Connected successfully<br>";
// Veri ekleme (hazır deyimi kullanarak)
$sql = "INSERT INTO users (name, email, age) VALUES (:name, :email, :age)";
$stmt = $pdo->prepare($sql);
$name = 'ServBay PDO Demo';
$email = 'pdo@servbay.demo';
$age = 10;
// Parametreleri bağlayıp çalıştır
$stmt->execute([
':name' => $name,
':email' => $email,
':age' => $age
]);
echo "PDO: New record created successfully<br>";
// Veri sorgulama
$stmt = $pdo->prepare("SELECT id, name, email, age FROM users WHERE name = :name");
$stmt->execute([':name' => 'ServBay PDO Demo']);
// Tüm sonuçları al
$users = $stmt->fetchAll(); // Varsayılan olarak FETCH_ASSOC
if ($users) {
echo "PDO Queried data:<br>";
foreach ($users as $row) {
echo "id: " . $row['id'] . " - Name: " . $row['name'] . " - Email: " . $row['email'] . " - Age: " . $row['age'] . "<br>";
}
} else {
echo "PDO: 0 results found<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ı script bitiminde genellikle otomatik kapanır, ayrıca close() çağrısı gerekmez
// $pdo = null; // İsterseniz açıkça null'a çekerek kapatabilirsiniz
?>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
66
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
Kodunuzu Yerleştirin: İstediğiniz örnek kodu bir .php dosyasına (örneğin db_test_mysqli.php veya db_test_pdo.php) kaydedin ve ServBay web sitenizin kök dizinine (örneğin /Applications/ServBay/www/myproject/) yerleştirin. Ardından, ilgili URL'yi (örn. http://myproject.servbay.demo/db_test_mysqli.php) tarayıcınızdan açabilirsiniz. Web sitenizin ServBay içinde doğru şekilde yapılandırıldığından ve aktif olduğundan emin olun.
Sıkça Sorulan Sorular (SSS)
S: ServBay'de PHP'nin MySQL uzantılarını manuel olarak kurmam gerekir mi?
C: Hayır, gerekmez. ServBay, yönettiği tüm PHP sürümleri için mysqlnd, mysqli ve PDO_MySQL gibi temel MySQL uzantılarını önceden yüklemiş ve varsayılan olarak etkinleştirmiştir. Kurulum veya yapılandırma işlemi yapılmasına gerek yoktur, doğrudan PHP kodunuzda kullanmaya başlayabilirsiniz.
S: mysqli ve PDO arasında hangisini seçmeliyim?
C:
- PDO’yu tercih edin: Uygulamanızda farklı veritabanlarını (yalnızca MySQL/MariaDB değil) desteklemeniz veya daha modern, nesne yönelimli ve taşınabilir bir kod tabanı istemeniz durumunda PDO idealdir. Ayrıca zorunlu olarak hazır ifadeler kullanıldığı için SQL enjeksiyonuna karşı daha güvenlidir.
mysqliseçeneğini düşünün: Yalnızca MySQL veya MariaDB kullanacaksanız ve bu veritabanlarına özgü bazı ileri düzey özelliklerden faydalanmak istiyorsanız,mysqligüçlü ve yüksek performanslı bir seçenektir. Hem nesne yönelimli hem de prosedürel API sunar.
Genellikle yeni projelerde PDO kullanılması tavsiye edilir.
S: ServBay’deki MySQL/MariaDB servisine bağlanırken hangi parametreleri kullanmalıyım?
C:
- Sunucu Adı (Host): Genellikle
127.0.0.1veyalocalhost. - Port (Port): ServBay'de MySQL/MariaDB'nin varsayılan portu genellikle
3306'dır. Paket yöneticisinden bu portu kontrol edebilirsiniz. - Kullanıcı Adı / Parola (Username / Password): MySQL/MariaDB üzerinde oluşturduğunuz kullanıcı adı ve şifredir. İlk kullanıyorsanız, yeni bir kullanıcı eklemeniz gerekebilir veya root kullanıcı (üretim ortamında önerilmez) ile giriş yapabilirsiniz. Kullanıcı yönetimini ServBay’in phpMyAdmin’i veya başka bir araç ile yapabilirsiniz.
- Veritabanı Adı (Database Name): Bağlanacağınız veritabanının adı.
S4: Eski projemde kullanılmış olan, artık desteklenmeyen mysql_* fonksiyonları mevcut; ServBay bunları destekliyor mu?
C: Evet, geliştiricilerin eski uygulamaları bakım ve taşıma işlemlerini kolaylaştırmak amacıyla, ServBay’in sunduğu PHP 5.6 ortamı eski mysql_* fonksiyonlarına destek sunar (ör. mysql_connect). Bu fonksiyonlar PHP 5.5’te kaldırılmış, PHP 7.0’da tamamen silinmiştir. ServBay’in PHP 5.6 paketi ile eski tip fonksiyonlara ihtiyaç duyan projelerinizi çalıştırabilir ve eski PHP sürümlerini ayrıca edinmek zorunda kalmazsınız.
Fakat dikkat:
- Bu desteği yalnızca geçici amaçlı uyumluluk veya eski projelerde bakım için kullanın.
- Yeni projelerde ya da eski kodunuzu dönüştürürken, kesinlikle modern ve güvenli
mysqliveyaPDOuzantılarını tercih edin. Çünkümysql_*fonksiyonlarında güvenlik açıkları (ör. SQL enjeksiyonu riski) ve yeni veritabanı fonksiyonlarının eksikliği bulunur.
Sonuç
ServBay, tüm PHP sürümlerinde mysqlnd, mysqli ve PDO_MySQL uzantılarını önceden yükleyip etkinleştirerek ve PHP 5.6 sürümünde eski mysql_* işlevleri için özel uyumluluk sağlayarak, PHP geliştiricilerinin veritabanı bağlantısı ve işlemlerini büyük oranda kolaylaştırır. Eklenti kurulumu veya yapılandırmasıyla uğraşmadan, doğrudan kodunuzda projenize en uygun uzantıyı seçip (çoğunlukla PDO ya da mysqli önerilir) ServBay üzerinde çalışan MySQL veya MariaDB veritabanlarıyla kolayca entegrasyon kurabilirsiniz.
Bu kutudan çıktığı gibi çalışan kullanım kolaylığı, uygulamanıza odaklanmanızı sağlar. ServBay’in sunduğu kararlı ve yüksek performanslı yerel ortamda web servislerinizi hızlıca geliştirebilir, test edebilir ve bakımını kolaylıkla sürdürebilirsiniz.
