PDO İle Veritabanı Bağlantısı (Yeni MySQL)

+ -
0
Merhaba arkadaşlar bu yazımızda veritabanı bağlantısında daha güvenli bağlantı sağlayan ve tavsiye ettiğimiz PDO yönteminden bahsedeceğim.

PDO ile bağlantı yöntemimiz;
try{
        $lh = "localhost"; //bağlantı noktası
        $kid = "";  //veritabanı kullanıcı adı
        $sifre= ""; //veritabanı kullanıcı şifre
        $vtadi= ""; //veritabanı ismi
        $p_turk = new PDO("mysql:host=$lh;dbname=$vtadi;charset=utf8", $kid, $sifre);  //Veritabanı bağlantısını sağlayalım
        $p_turk->exec("SET CHARSET UTF8"); //UTF8 DÖNÜŞTÜRÜCÜ (SABİT KALSIN)
        $p_turk->exec("SET NAMES 'utf8'"); //UTF8 DÖNÜŞTÜRÜCÜ (SABİT KALSIN)
    }
    catch(PDOException $e){
        print $e->getMessage(); //Bağlantı sırasında bir hata varsa yazdır.
    }
Bu bağlantı yöntemi "localhost"a bağlanmaya çalıştığımızda kullanacağımız yöntemdir.

-Uzak bir sunucuya remote olarak bağlanmak istediğimizde kullanacağımız yöntem;
try{
        $lh = "5.2.81.101"; //bağlantı noktası
        $kid = "";  //veritabanı kullanıcı adı
        $sifre= ""; //veritabanı kullanıcı şifre
        $vtadi= ""; //veritabanı ismi
        $p_turk = new PDO("mysql:host=$lh;dbname=$vtadi;port=3306;charset=utf8", $kid, $sifre);  //Veritabanı bağlantısını sağlayalım
        $p_turk->exec("SET CHARSET UTF8"); //UTF8 DÖNÜŞTÜRÜCÜ (SABİT KALSIN)
        $p_turk->exec("SET NAMES 'utf8'"); //UTF8 DÖNÜŞTÜRÜCÜ (SABİT KALSIN)
    }
    catch(PDOException $e){
        print $e->getMessage(); //Bağlantı sırasında bir hata varsa yazdır.
    }
PORT'u 3306 olarak kullanmamız gerek bu genel hostların panelinde sabit olarak belirtilmiştir, eğer değiştirilmiş ise veya bağlanamıyorsanız host sağlayıcınıza başvurun.

     Bağlantımızı kurduktan sonra veritabanı bağlantı noktamızı "$p_turk" olarak belirledik. Daha sonraki işlemler;

Hata gösterimleri;

Hata gösterimleri ile yaptığınız işlemler içerisinde nasıl bir hata olduğunu öğrenebilirsiniz.
error_reporting(E_ALL);
$test = $p_turk->prepare('bozuk sql');
if (!$test) {
    echo "\nPDO::errorInfo():\n";
    print_r($p_turk->errorInfo());
} //Burada işlemeyen sorgunun neden işlemediğini yazdırabiliriz.
.
$this->pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING ); //PDO Sorgu işleminden önce bu kodu da ekleyelim tüm hataları göstermesini sağlayalım.
bu sayede pdo işlemlerinde hatalarımızı görebiliriz.

SQL Kodlarını Temizleme;
Gelen veriler içerisinde sql komutu ile saldırmaya çalışan olursa eğer aşşağıdaki örneklerdeki PREPARE ve EXECUTE yöntemleri ile otomatik olarak silinmektedir.Fakat bunu daha güvenli hale getirip direk gelen veriyi komut ile temizlemek isterseniz eğer;
$gelenveri = $_POST[mesaj];
$gelenveri = $p_turk->quote($gelenveri);//$gelenveriye tanımlanan içerik içerisinden sql komutlarını oto temizlemiş oluyoruz.


PDO Select İşlemi;

Tablo üzerindeki verileri seçip ister tüm tabloyu yazdırabilir isterseniz de tek veriyi seçip o verinin diğer sütunlarını yazdırabiliriz.

$query = $p_turk->query("SELECT * FROM gonderiler", PDO::FETCH_ASSOC);
//Bu şekilde "gonderiler" tablosundaki tüm satırları array şeklinde döktürebiliriz.
//print_r($query); şeklinde tüm konuları array'a döktürerek sıralı olarak yazdırabiliriz.
//ÖR: array( [id] = "1" = array( [title] = "Bacalı gemi.",[url] = "1-bacali-gemi",[kategori] = "konu" ), [id] = 2 = array( [title] = "Bacalı gemi.",[url] = "1-bacali-gemi",[kategori] = "konu" ) )
.
$id = 1;
$query = $p_turk->query("SELECT * FROM gonderiler WHERE id = $id")->fetch(PDO::FETCH_ASSOC);
//burada ise "gonderiler" tablosundaki "id" sütunu "1"e eşit olan satırı seçip array'a döktürebiliriz.
//burada da print_r($query); şeklinde yazdırdığımızda bu sefer seçilen satırdaki stunlar array olarak dökülecektir.
//ÖR: array( [title] = "Bacalı gemi.",[url] = "1-bacali-gemi",[kategori] = "konu" ) gibi array dökülecektir.
bu şekilde tüm tabloyu veya tablo içerisinde bir sütun'u seçebiliriz.

PDO İnsert İşlemi; 

İnsert işlemi işe veritabanına yeni veriler ekleyebiliriz. Yeni veri eklemede pdo -> MySQL'ye göre daha güvenli bir şekilde işlem yapabilmektedir.
$query = $p_turk->prepare("INSERT INTO gonderiler SET
title = ?,
url = ?,
kategori = ?");
$insert = $query->execute(array(
     "Bacalı gemi.", 
     "1-bacali-gemi", 
     "yeni-konu"
));//Sorgu işlemi $insert üzerinde yapılmaktadır. if ile kontrol sağlanacağında if($insert) şeklinde yapılmalıdır.
//Yukarıdaki sorguda sorgumuz sırası ile eklemektedir. Bunları karışık eklemenin başka bir yöntemi de şöyledir;
.
$query = $p_turk->prepare("INSERT INTO gonderiler SET
title = :yazi,
url = :link,
kategori = :kat");
$insert = $query->execute(array(
     "yazi" = "Bacalı gemi.", 
     "kat" = "yeni-konu",
     "link" = "1-bacali-gemi"
));// Üstteki işleme benzer fakat yerleri farklı olsa da neyin nereye yazılacağını biz belirliyoruz. (Sıralı şekilde gitmiyor)
-Yukarıda olduğu gibi yöntemler daha güvenlidir. MySQL'deki gibi tek satırda sorguyu çalıştırmaya çalışırsanız güvenliği göz ardı etmiş olursunuz.
-Tavsiye olarak 2. işlemi uygulamanız daha işlevsel olacaktır. Yeni bir özellik ekleyeceğinizde sırasını bulmak yerine direk yerlerini belirtmek daha kolaydır çünkü.
(INSERT işleminde veriler kullanıcıdan geldiği için PDO Yöntemini kullanmanızı şiddetle tavsiye ediyoruz. MySQL fonksiyonlarda SQL Injection açığı olduğunu unutmamanızı belirtmek isteriz.)


PDO Update İşlemi;

Update işleminde de INSERT işleminde olduğu gibi aynı 2 yöntem ile yapabiliriz. UPDATE işleminde de Veriler kullanıcıdan geldiği için güvenliğinizi göz önüne almalısınız.
$query = $p_turk->prepare("UPDATE gonderiler SET
title = ?
WHERE id = ?");
$update = $query->execute(array(
     "Bacalı gemi geliyor.", 
     "1"
));
//Yukarıdaki sorguda sorgumuz sırası ile eklemektedir. Bunları karışık eklemenin başka bir yöntemi de şöyledir;
.
$query = $p_turk->prepare("UPDATE gonderiler SET
title = :yeniyazi,
WHERE id = :kid");
$update = $query->execute(array(
     "kid" = "1", 
     "yeniyazi" = "Bacalı gemi geliyor.",
));// Üstteki işleme benzer fakat yerleri farklı olsa da neyin nereye yazılacağını biz belirliyoruz. (Sıralı şekilde gitmiyor)

PDO Delete İşlemi;

Delete işlemi ile veritabanındaki tüm satırları silebilir veya seçilen bir satırı silebilirsiniz.Bu işlem tek satırda yapılabilir çünkü veri sabit olduğu için kullanıcı değişim yapamayacaktır.
$sil = $p_turk->exec("DELETE FROM gonderiler");//gonderiler tablosundaki tüm sütunlar tek kod ile silinmiş olacaktır.
.
$query = $p_turk->prepare("DELETE FROM gonderiler WHERE id = :kid");
$delete = $query->execute(array(
   'kid' => '1'
));//id'si "1" olan satır'ı sildirdik.
yukarıdaki gibi ister tüm tabloyu isterseniz de tablodaki tek veriyi sildirebiliriz.

PDO Sonlandırma;
Eğer gerek olursa pdo bağlantınızı sonlandırmak için "NULL" olarak belirtmeniz yeterli olacaktır;
$p_turk = null;


(UNUTMAYIN PDO İŞLEMLERİNDE PREPARE VE EXECUTE İLE YAPILAN İŞLEMLERDE SQL KOMUTLARI OTOMATİK OLARAK TEMİZLENMEKTEDİR!)



Yorumlar 0

Bilgilendirme
Yorum Ekleyebilmeniz için Sitemize Kayıt Olmanız Gerekmektedir.