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;mysqli
vePDO_MySQL
uzantı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,
mysqlnd
varsayılan olarakmysqli
vePDO_MySQL
uzantılarının temel katmanı olmuştur. PHP’nin içine doğrudan entegre edilir ve ek bir MySQL istemcisine (libmysqlclient
gibi) ihtiyaç duymaz. - Avantajları: Eski
libmysqlclient
kü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ındanmysqli
ya daPDO
ile 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,
mysqli
gü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
,PDOStatement
sı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_db
adında bir veritabanı oluşturdunuz.servbay_user
adında, şifresiyour_password
olan veservbay_db
üzerinde uygun yetkilere sahip bir kullanıcı yarattınız.servbay_db
veritabanınızdausers
adlı 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
// --- 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 = "[email protected]";
$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();
?>
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
// --- 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 = '[email protected]';
$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
?>
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.
mysqli
seç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,mysqli
güç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.1
veyalocalhost
. - 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
mysqli
veyaPDO
uzantı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.