İçindekiler

Giriş

Eğer web geliştirme öğrenmeye yeni başlayan biriyseniz bu rehber sizin için oldukça faydalı olacak. Bu rehberi sayesinde PHP MySQL veri tabanı bağlantısı nasıl yapılır öğreneceksiniz. Farklı şekilde oluşturduğunuz tabloları yönetmek, düzenlemek, görüntülemek veya silmek istiyorsanız bunu nasıl yapacağınızı bilmeniz gerekiyor.

Nelere ihtiyacınız olacak

Bu rehbere başlamadan önce aşağıdakilere sahip olmalısınız:

  • Hosting kontrol paneli erişimi

Adım 1 – Bir MySQL Veritabanı Oluşturma

Eğer henüz bir MySQL veri tabanı oluşturmadıysanız bu adım gereklidir. Hostinger’da MySQL Veritabanları bölümünü kullanarak kolayca MySQL veri tabanı oluşturabilirsiniz. Cpanel üzerinde nasıl bir MySQL veri tabanı oluşturabileceğinizi öğrenmek için bu rehbere göz atın.  Hostinger Kontrol Paneli MySQL veritabanları bölümü

MySQL Veritabanları bölümünü açtıktan sonra gerekli bilgileri girin ve Oluştur butonuna tıklayın.Hostinger Kontrol Paneli MySQL Veritabanı Oluştur

ÖNEMLİ: Oluşturduğunuz MySQL veritabanı bilgilerini bir köşeye yazın. Sıradaki adımda onlara ihtiyacınız olacak.

 

Adım 2 – MySQL Veritabanı bağlantısı için PHP kodu yazma

Örneğimizde u613750452_name isimli veri tabanına bağlanıyor olacağız ve bu veri tabanımız u613750452_user kullanıcısıyla bağdaştırılmış. Veritabanı için bir de şifre belirlemelisiniz, biz buystuffpwd olarak belirledik.

Bahsetmeye değer bir diğer şey ise doğru bir sunucu adı veya host adınız olmalı. Hostinger’da MySQL host adı MySQL Veritabanları bölümünde bulunur. Örneğimizde mysql.hostinger.com olarak belirlenmiş.

Bir veritabanına yerel olarak bağlanırken (veritabanına bağlanmakta olan script, veritabanının barındığı sunucuya yüklenir) çoğu zaman localhost kullanabilirsiniz. Eğer bu çalışmazsa veya veritabanına uzaktan bağlanıyorsanız (örneğin kendi bilgisayarınız), sunucunun IP adresini kullanmanız gerekiyor. Daha fazla bilgi için hosting sağlayıcınızla irtibata geçerek hostname olarak kullanacağınız bilgileri edinebilirsiniz.


PHP ile bir SQL veritabanına bağlanmanın iki yöntemi bulunuyor, MySQLi ve PDO. En önemli değişikliklerden birisi, ikisininde veritabanına değişiklik yaparken SQL injection saldırılarını ortadan kaldırmayı sağlayan ‘prepared statements’ desteği sağlaması. Orjinal ‘mysql_’ fonksiyonları deprecated (artık kullanılmayan) olduğundan güvenli olmaması ve artık geliştirilmemesi sebebiyle kullanılmamalıdır.

 

MySQLi açılımı MySQL Improved yani, Geliştirilmişdir ve MySQL arayüzüne yeni özellikler getirmiştir. PDO ise PHP Data Object olarak açılır. PDO ve MySQLi arasındaki başlıca fark PDO’nun aynı script içinde birden fazla farklı veri tabanını (MySQL, MS SQL, Postgre DB) desteklemesidir ancak fonksiyonlarla alakalı olarak sadece bir defa veri yazmanız gerekiyor. PDO ‘object oriented’, Türkçe olarak ‘Nesne Yönelimli’ yani veri tabanı bağlantısı değişken bir obje oluşturarak sağlanır:

  1. $my_Object = new OBJECT();

MySQLi

Aşağıda MySQLi kullanarak MySQL veri tabanına bağlantı oluşturmak için kullanılabilen basit bir PHP kodunu görüyoruz:

  1. <?php
  2. $servername = "mysql.hostinger.com";
  3. $database = "u613750452_name";
  4. $username = "u613750452_user";
  5. $password = "buystuffpwd";
  6.  
  7. // Create connection
  8.  
  9. $conn = mysqli_connect($servername, $username, $password, $database);
  10.  
  11. // Check connection
  12.  
  13. if (!$conn) {
  14.  
  15. die("Connection failed: " . mysqli_connect_error());
  16.  
  17. }
  18. echo "Connected successfully";
  19. mysqli_close($conn);
  20. ?>

Bu script’de kullanılan ana yöntem mysqli_connect() metodudur. Bu dahili bir PHP fonksiyonudur, daha fazla bilgi için bu bağlantıyı ziyaret edin.

Kodumuzun hemen en başında birkaç değişken deklorasyonu görüyoruz ve değerler bu değişkenlere atanmış. Genellikle düzgün bir bağlantı oluşturabilmek için dört değişkene ihtiyacımız var: $servername, $database, $username, ve $password. Kodumuzda veritabanı detaylarını eksiksiz olarak bu değişkenlere değer olarak belirledik ve daha sonra mysqli_connect() fonksiyonu içinde bu değişkenleri ilgili fonksiyona geçiriyoruz.

Sonraki adım mysqli_connect() fonksiyonu, bu sayede sağlanan detaylarla veritabanına bağlantı kuruyoruz ve sonraki bölümde kod mysqli_connect() fonksiyonunun başarısına bağlı olarak çalıştırılıyor. Gördüğünüz gibi, eğer bağlantımız kurulamazsa aşağıdaki mesajı bize gösterecek:

  1. if ($conn->connect_error) {
  2. die("Connection failed: " . $conn->connect_error);
  3. }

Burada bir die() fonksiyonu çalıştırıldı ve bunun anlamı scriptimizi sonlandırma ve girdiğimiz mesajı bize göstermek oluyor. Yani varsayılan olarak Connection Failed: ve hata mesajı bize sorunu belirlememizde yardımcı olacak.

Eğer bağlantı başarılıysa, kodun sonraki bölümü çalıştırılacak:

  1. echo "Connected successfully";

Bu IF ifadesi içerdiğinden önceki hata mesajı yerine basit bir şekilde başarı mesajı gösterecektir.

Kodun son bölümü ise:

  1. mysqli_close($conn);

Bunun sayesinde veritabanı bağlantısını manuel olarak kapatılabilir. Eğer belirlenmemişse, bağlantı script tamamlandığında kendi kendini kapatacaktır. Bu satırı kullanarak scriptin  tamamlanmasından önce bağlantıyı kapatabilirsiniz.

PDO

Bir PDO veritabanı Data Source Name (DSN), kullanıcı adı ve şifre ile yeni bir ‘PDO object’ oluşturmanızı gerektirir. DSN veritabanı türünü, veritabanının adını ve gerekliyse diğer bilgileri tanımlar. DSN aşağıdaki kod içinde görüleceği üzere gerçek PDO objesini oluştururken parametre olarak kullanılacak olan basit bir değişken olabilir.

PDO, farklı birden fazla veritabanını destekler ve DSN, ‘mysql:’ satırını diğer veri tabanı syntax’ı ile değiştirerek, değişimli bağlantıları tanımlar. Gerçek bir script’te kullanıcıya istediği bağlantıyı seçmesini ve gerekli DSN değişkenini seçme kodunu yazma izni verebilirsiniz. Biz bu rehberde sadece MySQL kullanıyoruz.

Veritabanı bağlantısını temsil eden PDO objesi oluştururken, ‘try… catch…’ kodu içine alabilirsiniz. Bunun anlamı script’in verilen kodu kullanarak bağlantı kurmaya çalışır ve eğer bir problem oluşursa ‘catch’ bölümündeki kod çalıştırılır. Catch bloklama kullanarak hata mesajlarını gösterebilir veya deneme başarısız olursa alternatif bir kod çalıştırabilirsiniz. Örneğimizde hangi bilgi parçasının yanlış olduğunu size söyleyen basit bir hata mesajı bulunuyor:

  1. <?php
  2. $servername = "mysql.hostinger.com";
  3. $username = "u613750452_user";
  4. $database = "u613750452_name";
  5. $password = "buystuffpwd";
  6.  
  7. // Create a new connection to the MySQL database using PDO
  8. $conn = new mysqli($servername, $username, $password);
  9.  
  10. // Check connection
  11. if ($conn->connect_error) {
  12. die("Connection failed: " . $conn->connect_error);
  13. }
  14. echo "Connected successfully";
  15. ?>

Adım 3 – Bağlantı kontrolü ve yaygın hata çözümü

Eğer PHP bağlantı kodu başarılı bir şekilde çalışır ve bağlantı sorunsuz oluşturulursa, internet sitenizde aşağıdaki script’i görüntülersiniz:

PHP MySQL bağlantısı başarılı

PHP MySQL Bağlantı Hatalarını Çözümleme

Eğer bağlantı başarısız olmuşsa, farklı birşey görürsünüz. MySQLi ve PDO için hatalar biraz farklı olacaktır.

Yanlış Şifre Hatası

Örneğin PHP kodundaki şifreyi biraz değiştirirsek (veritabanındaki gerçeğini değiştirmeden).

MySQLi Hatası:

PHP MySQL Bağlantısı Başarısız

PDO Hatası:

PHP PDO bağlantısı başarısız

Yani bu mesajı görüyorsanız, yapmanız gereken ilk şey veritabanı bilgilerini kontrol etmek. Bu hatanın ortaya çıkmasının bir diğer sebebi veritabanına bir kullanıcı belirtmemiş olmanız olabilir. Hostinger kontrol paneli söz konusu olduğunda MySQL Vertabanları bölümündeki veritabanınız aşağıdaki gibi görünmelidir:Hostinger MySQL veritabanı bilgileri

Cpanel durumunda ise, veritabanınız aşağıdaki gibi görünmelidir:cPanel mySQL veritabanı bilgileri

MySQL Sunucusuna Bağlanılamıyor

MySQLi hatası:PHP MySQL bağlantı hata mesajı

‘Sunucu’ üzerinde MySQL sunucusuna bağlanılamıyor (110) anlamı script’in bir sunucudan cevap alamamasıdır. Bunun sebebi sunucu adı olarak localhost yerine server belirtmiş olmamızdır ve dolayısıyla isim tanınamıyor.

PDO hatası:

PHP PDO Host Hatası

  • [HY000] genel hata anlamına gelir.
  • [2002] ise Yerel MySQL sunucusuna bağlanılamıyor anlamına gelir. Mesajın geri kalanı daha fazla bilgi verir, ‘host’ bulunamaması gibi.

Ve elbette, bir hata çözümlemedeki altın kuralı unutmamak oldukça önemlidir: error_log kontrolü.

Bu dosyayı script’in çalıştığı aynı klasörde bulabilirsiniz. Örneğin public_html içinde bir script çalıştırıyorsak, error.log dosyası aynı klasörde olacaktır.

Bu dosyanın içerisinde script’in oluşturduğu muhtemel hataları görerek bu sayede hatayı kolayca çözümleyebilirsiniz.

Sonuç

Bu rehberde veritabanları ve PHP Data Objects (PDO) ile MySQLi kullanarak MySQL bağlantısının nasıl yapılacağı hakkında bazı temel bilgiler sunduk. Öğrendiklerinizi daha gelişmiş scriptlerde ve konfigürasyonlarda kullanabilirsiniz. Bir veritabanına bağlanmak onlarla çalışmaya başlamanın ilk ve en önemli adımıdır.