{"id":1054,"date":"2014-03-31T19:48:05","date_gmt":"2014-03-31T16:48:05","guid":{"rendered":"http:\/\/www.gncz.net\/?p=1054"},"modified":"2014-03-31T19:48:05","modified_gmt":"2014-03-31T16:48:05","slug":"pdo-veritabani-kullanimi-php-data-objects","status":"publish","type":"post","link":"https:\/\/gncz.net\/index.php\/pdo-veritabani-kullanimi-php-data-objects.html","title":{"rendered":"PDO Veritaban\u0131 Kullan\u0131m\u0131 (PHP Data Objects)"},"content":{"rendered":"<p>PHP Veri Nesneleri (PDO) eklentisi, veritaban\u0131 i\u015flemlerini ger\u00e7ekle\u015ftirmek i\u00e7in sunulan bir aray\u00fczd\u00fcr. Php\u2019nin v5.5 s\u00fcr\u00fcm\u00fcnden itibaren <strong>mysql_<\/strong> \u015feklinde tan\u0131mlad\u0131\u011f\u0131m\u0131z fonksiyonlara destek vermemesi nedeniyle, veritaban\u0131 i\u015flemlerini <strong>PDO<\/strong> veya <strong>Mysqli<\/strong> ile yapmak zorunday\u0131z. Bizlere sunulan bu iki alternatifin birbirine g\u00f6re avantajlar\u0131 oldu\u011fu durumlar bulunmaktad\u0131r. Bunlar;<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"225px\"><strong>PDO<\/strong><\/td>\n<td><strong>Mysqli<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Sadece nesne y\u00f6nelimli kullan\u0131l\u0131r<\/td>\n<td>Nesne y\u00f6nelimsiz de kullan\u0131labilir<\/td>\n<\/tr>\n<tr>\n<td>12 farkl\u0131 veritaban\u0131n\u0131 ile kullan\u0131labilir<\/td>\n<td>Sadece MySQL ile kullan\u0131l\u0131r<\/td>\n<\/tr>\n<tr>\n<td>SQL Injection korumal\u0131d\u0131r<\/td>\n<td>SQL Injection kontrol\u00fcn\u00fc yaz\u0131l\u0131mc\u0131 yap\u0131lmal\u0131d\u0131r<\/td>\n<\/tr>\n<tr>\n<td>\u0130simlendirilmi\u015f parametreyi destekler<\/td>\n<td>\u0130simlendirilmi\u015f parametreyi desteklemez<\/td>\n<\/tr>\n<tr>\n<td>H\u0131z konusunda Mysqli\u2019den yava\u015ft\u0131r<\/td>\n<td>PDO\u2019dan %5 civar\u0131 daha performansl\u0131d\u0131r<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>temel olarak yukar\u0131daki \u015fekildedir diyebiliriz. Ben daha \u00f6nce \u201cNesne Y\u00f6nelimli Programla (OOP)\u201d ile anlat\u0131m yapmay\u0131 tercih edece\u011fimi s\u00f6yledi\u011fim i\u00e7in, buna ek olarak da uygulamalar\u0131mda PDO\u2019yu tercih etti\u011fimden (MsSQL i\u00e7in de kullan\u0131yorum ve SQL Injection kontrol\u00fcn\u00fc yapmama gerek kalm\u0131yor), bu yaz\u0131m sadece PDO\u2019nun temel kullan\u0131m\u0131 ile ilgili olacakt\u0131r. E\u011fer Mysqli kullanmay\u0131 se\u00e7ecekler varsa, kullan\u0131m\u0131nda mysql_ fonksiyonlar\u0131ndan pek bir fark bulunmuyor.\u00a0Bu arada, <strong>Php s\u00fcr\u00fcm\u00fcn\u00fcz v5 alt\u0131ndaysa bu eklentileri kullanamazs\u0131n\u0131z<\/strong>. Bu \u00f6nemli notu da ekledikten sonra art\u0131k PDO\u2019nun temel fonksiyonlar\u0131n\u0131n kullan\u0131m\u0131n\u0131 anlatmaya ge\u00e7ebiliriz.<\/p>\n<pre class=\"lang:default decode:true \">&lt;?php\r\nclass baglan{\r\n    \/\/veritaban\u0131 bilgileri\r\n    const host = 'localhost';\r\n    const user = 'root';\r\n    const pass = '';\r\n    const db = 'pdo';\r\n    public $conn;\r\n\r\n    public function __construct(){ \/\/a\u00e7\u0131l\u0131\u015fta \u00e7al\u0131\u015ft\u0131r\r\n        $this-&gt;dbBaglantiKur();\r\n    }\r\n\r\n    public function dbBaglantiKur(){ \/\/veritaban\u0131 ba\u011flant\u0131s\u0131 kurma\r\n        try{\r\n            $this-&gt;conn = new PDO(\"mysql:dbname=\".self::db.\";host=\".self::host, self::user, self::pass);\r\n            $this-&gt;conn-&gt;query(\"SET NAMES 'utf8'\");\r\n            $this-&gt;conn-&gt;query('set character set utf8');\r\n        }catch(PDOException $e){\r\n             die($e-&gt;getMessage());\r\n        }\r\n    }\r\n\r\n    public function dbOlustur(){ \/\/pdo adl\u0131 veritaban\u0131nda yazilar adl\u0131 tablo a\u00e7ma\r\n        $sql = \"CREATE TABLE IF NOT EXISTS `yazilar`(\r\n            `id` INT AUTO_INCREMENT NOT NULL,\r\n            `baslik` varchar(100) NOT NULL,\r\n            `icerik` varchar(400),\r\n            PRIMARY KEY (`id`)\r\n        )\";\r\n        $olustur = $this-&gt;conn-&gt;prepare($sql);\r\n        return $olustur-&gt;execute();\r\n    }\r\n\r\n    public function dbVerileriEkle(){ \/\/yaz\u0131lar tablosuna kay\u0131t ekleme (siral\u0131 parametre)\r\n        $yazilar = array('1. yaz\u0131n\u0131n ba\u015fl\u0131\u011f\u0131','1. i\u00e7erik', '2. ba\u015fl\u0131k','2. i\u00e7erik', '3. ba\u015fl\u0131k','3. i\u00e7erik');\r\n        $ekle = $this-&gt;conn-&gt;prepare('INSERT INTO yazilar (baslik,icerik) VALUES (?,?),(?,?),(?,?)');\r\n        return $ekle-&gt;execute($yazilar);\r\n    }\r\n\r\n    public function dbSonKayitIdAl(){ \/\/son kay\u0131t id de\u011feri !(bu ba\u011flant\u0131da ekleme i\u015flemi yap\u0131lm\u0131\u015fsa)\r\n        return $this-&gt;conn-&gt;lastInsertId();\r\n    }\r\n\r\n    public function dbVerileriSay(){ \/\/kay\u0131t say\u0131s\u0131n\u0131 bulma\r\n        $say = $this-&gt;conn-&gt;prepare('SELECT id FROM yazilar');\r\n        $say-&gt;execute();\r\n        return $say-&gt;fetchColumn();\r\n    }\r\n\r\n    public function dbVerileriCek(){ \/\/b\u00fct\u00fcn verileri alma\r\n        $veriler = $this-&gt;conn-&gt;prepare('SELECT id,baslik,icerik FROM yazilar');\r\n        $veriler-&gt;execute();\r\n        return $veriler-&gt;fetchAll(PDO::FETCH_ASSOC);\r\n    }\r\n\r\n    public function dbVeriyiCek($id){ \/\/sadece bir kay\u0131t\u0131 (parametredeki) alma\r\n        $veri = $this-&gt;conn-&gt;prepare('SELECT id,baslik,icerik FROM yazilar WHERE id=?');\r\n        $veri-&gt;execute(array($id));\r\n        return $veri-&gt;fetch(PDO::FETCH_ASSOC);\r\n    }\r\n\r\n    public function dbVerilerdeAra($aranan){ \/\/kay\u0131tlarda arama yapma\r\n        $bul = $this-&gt;conn-&gt;prepare('SELECT id,baslik,icerik FROM yazilar WHERE baslik LIKE ?');\r\n        $bul-&gt;execute(array('%'.$aranan.'%'));\r\n        return $bul-&gt;fetchAll(PDO::FETCH_ASSOC);\r\n    }\r\n\r\n    public function dbVeriyiGuncelle($id){ \/\/parametredeki veriyi g\u00fcncelleme (isimlendirilmi\u015f parametre)\r\n        $guncelle = $this-&gt;conn-&gt;prepare('UPDATE yazilar SET baslik = :baslik WHERE id = :id');\r\n        return $guncelle-&gt;execute(array('baslik' =&gt; 'bu ba\u015fl\u0131\u011f\u0131 de\u011fi\u015ftirdim', 'id' =&gt; $id));\r\n    }\r\n\r\n    public function dbVeriyiSil($id){ \/\/parametredeki kay\u0131t\u0131 silme\r\n        $sil = $this-&gt;conn-&gt;prepare('DELETE FROM yazilar WHERE id=?');\r\n        return $sil-&gt;execute(array($id));\r\n    }\r\n\r\n    public function __destruct(){ \/\/ba\u011flant\u0131y\u0131 sonland\u0131rma\r\n        $this-&gt;conn = null;\r\n    }\r\n}\r\n\r\n\/\/\u00f6rnek kullan\u0131m\r\n$baglanti = new baglan;\r\n$baglanti-&gt;dbVerileriEkle();\r\necho $baglanti-&gt;dbSonKayitIdAl();\r\n?&gt;<\/pre>\n<p>Yukar\u0131da PDO\u2019nun temel kullan\u0131m\u0131n\u0131 g\u00f6sterdim. PDO\u2019n\u0131n \u00a0ba\u015fka bir \u00e7ok methodu bulunmakta, e\u011fer bunlar\u0131 incelemek isterseniz <a title=\"PDO fonksiyonlar\u0131\" href=\"http:\/\/php.net\/pdo\" target=\"_blank\">Php.net<\/a> adresini \u00f6nerebilirim. SQL Injection sorunundan korunmak i\u00e7in mutlaka prapared statements kullan\u0131n. Ayr\u0131ca, ald\u0131\u011f\u0131n\u0131z parametrelerde bulunabilme ihtimali olan Html etiketlerini (&lt;script&gt;&lt;\/script&gt;) temizlemeyi unutmay\u0131n, \u00e7\u00fcnk\u00fc prapared statements XSS a\u00e7\u0131\u011f\u0131n\u0131 \u00f6nlemez.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>PHP Veri Nesneleri (PDO) eklentisi, veritaban\u0131 i\u015flemlerini ger\u00e7ekle\u015ftirmek i\u00e7in sunulan bir aray\u00fczd\u00fcr. Php\u2019nin v5.5 s\u00fcr\u00fcm\u00fcnden itibaren mysql_ \u015feklinde tan\u0131mlad\u0131\u011f\u0131m\u0131z fonksiyonlara destek vermemesi nedeniyle, veritaban\u0131 i\u015flemlerini PDO veya Mysqli ile yapmak zorunday\u0131z. Bizlere sunulan bu iki alternatifin birbirine g\u00f6re avantajlar\u0131 oldu\u011fu durumlar bulunmaktad\u0131r. Bunlar; PDO Mysqli Sadece nesne y\u00f6nelimli kullan\u0131l\u0131r Nesne y\u00f6nelimsiz de kullan\u0131labilir 12 farkl\u0131 veritaban\u0131n\u0131 ile kullan\u0131labilir Sadece MySQL<a class=\"more-link\" href=\"https:\/\/gncz.net\/index.php\/pdo-veritabani-kullanimi-php-data-objects.html\">[Devam\u0131n\u0131 Oku&#8230;]<\/a><\/p>\n","protected":false},"author":1,"featured_media":1055,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[20],"tags":[169,168,167,170],"_links":{"self":[{"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/posts\/1054"}],"collection":[{"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/comments?post=1054"}],"version-history":[{"count":2,"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/posts\/1054\/revisions"}],"predecessor-version":[{"id":1057,"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/posts\/1054\/revisions\/1057"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/media\/1055"}],"wp:attachment":[{"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/media?parent=1054"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/categories?post=1054"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/tags?post=1054"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}