- Konu sahibi
- #1
PHP MySQL nedir?
PHP, sunucu tarafında çalışan bir programlama dilidir; MySQL ise verileri tablolar içinde saklayan ilişkisel bir veritabanı yönetim sistemidir. PHP ile MySQL birlikte kullanıldığında kullanıcı kayıtları, ürünler, yazılar veya siparişler gibi kalıcı veriler web uygulamasına eklenebilir, okunabilir, güncellenebilir ve silinebilir. PHP doğrudan MySQL’in kendisi değildir; PHP uygulaması, PDO veya MySQLi gibi bir bağlantı arayüzü üzerinden MySQL sunucusuna sorgu gönderir.
PHP ile MySQL nasıl çalışır?
Tipik işlem sırası şöyledir:
- Kullanıcı tarayıcıdan bir PHP sayfası ister.
- PHP, veritabanı bağlantısını açar veya mevcut bağlantıyı kullanır.
- Uygulama, SQL sorgusunu parametrelerle birlikte MySQL’e gönderir.
- MySQL sorguyu çalıştırıp sonucu PHP’ye döndürür.
- PHP sonucu HTML, JSON veya başka bir çıktı biçimine dönüştürür.
Örneğin bir blog yazısı listelenirken PHP, MySQL’den yayımlanmış yazıları ister; MySQL satırları döndürür; PHP de bu satırları sayfada gösterir. Veritabanı, PHP dosyalarının kapanmasından sonra da veriyi koruduğu için uygulama her istekte aynı kalıcı bilgilere ulaşabilir.
Bir yazı listesindeki görev paylaşımı
Mevcut ve erişim yetkisi verilmiş bir
posts tablosunda id, title ve published sütunları olduğunu düşünün. MySQL tarafında liste ihtiyacını tanımlayan salt okuma sorgusu şudur:
Kod:
SELECT id, title
FROM posts
WHERE published = 1
ORDER BY id DESC;
Bu sorgu yayımlanmış satırları seçer; HTML sayfası veya paragraf üretmez. Bağlantısı önceden kurulmuş PHP uygulaması sorgu sonucundaki satırları alıp bir görünümde biçimlendirebilir. Aşağıdaki çıktı parçası,
$post değişkeninin bu sonuçtan alınmış, string başlık alanı olan bir satır olduğunu varsayar:
Kod:
echo htmlspecialchars(
$post['title'],
ENT_QUOTES | ENT_SUBSTITUTE,
'UTF-8'
);
Bu parça tek başına bağlantı kurmaz veya sorguyu çalıştırmaz. Başlıkta HTML karakteri varsa onları metin olarak gösterir. Bağlantı bilgileri, yetkilendirme ve sonuç döngüsü uygulamanın diğer parçalarında yönetilir. Böylece üç ayrı sorumluluk görünür olur: MySQL doğru satırı seçer, PHP iş kurallarını uygular, tarayıcı üretilen HTML’i gösterir.
İlk kontrolde sorgunun beklenen satırları döndürdüğüne, PHP’nin doğru alanı kullandığına ve çıktının metin olarak göründüğüne bakın. Boş sonuç her zaman bağlantı hatası değildir; yayımlanmış kayıt bulunmaması da mümkündür. Ekrana bir başarı mesajı yazdırılması ise kayıt işleminin veritabanında tamamlandığını tek başına kanıtlamaz.
Hangi bağlantı yöntemini seçmelisiniz?
PHP’nin güncel belgelerinde hem MySQLi hem PDO MySQL kullanılabilir seçeneklerdir. PDO farklı veritabanları için ortak bir arayüz sunar; MySQLi MySQL’e odaklanır. PDO kullanmak MySQL’e özgü SQL ifadelerini başka veritabanının sözdizimine otomatik çevirmez. Seçimden bağımsız olarak kullanıcı verisini SQL metnine birleştirmek yerine parametreli sorgu kullanın.
| Görev | İlgili katman | Beklenen sonuç |
|---|---|---|
| Yayımlanmış yazıları seçmek | MySQL ve SQL | Sıralı kayıt kümesi |
| Görüntüleme yetkisini denetlemek | PHP uygulama mantığı | İzinli veya reddedilmiş istek |
| Başlığı HTML’e yerleştirmek | PHP görünüm kodu | Bağlama uygun kodlanmış metin |
| Sayfayı ekranda göstermek | Tarayıcı | HTML ve CSS’nin işlenmesi |
Sık yapılan hatalar
- MySQL ile PHP’yi aynı şey sanmak: PHP uygulama katmanıdır, MySQL veri saklama ve sorgulama katmanıdır.
- Sorguyu string birleştirmeyle kurmak: Bu yaklaşım SQL enjeksiyonu riskini artırır. Parametreli sorgu kullanın.
- Karakter kodlamasını belirtmemek: PDO bağlantısında
charset=utf8mb4kullanmak, Türkçe karakterlerin doğru taşınmasına yardımcı olur. - Veritabanı hatasını kullanıcıya olduğu gibi göstermek: Ayrıntılı hata mesajlarını günlükte tutup kullanıcıya genel bir hata döndürün.
- Sorgu sonucunu HTML’e doğrudan basmak: Veritabanından gelen metni çıktı bağlamına uygun şekilde kaçışlayın.
Sık sorulan sorular
PHP MySQL olmadan çalışabilir mi?
Evet. PHP dosya sistemi, API, JSON veya başka veritabanlarıyla da çalışabilir. MySQL yalnızca PHP uygulamalarının kullanabileceği veri saklama seçeneklerinden biridir.
Tarayıcı doğrudan MySQL’e bağlanır mı?
Bu web uygulaması düzeninde tarayıcı HTTP isteğini PHP uygulamasına gönderir; veritabanı bağlantısını sunucu tarafı yönetir. Veritabanı kullanıcı adı ve parolasını tarayıcıya giden HTML veya JavaScript içine koymayın. Ön yüzün bir API çağırması da aradaki uygulama katmanını ortadan kaldırmaz.