PHP DETAYLI PDO KULLANIMI |FAYDALARI-FARKLARI|

'CaptainKanka

O Şimdi Asker!
14 Eki 2012
1,683
1,265
localhost/admin.php
Merhaba Arkadaşlar

Bu gün sizlerle php'de pdo kullanımının önemini, veritabanı bağlantısını, veri ekleme, güncelleme, silme ve listeleme işlemlerine bakacağız.

İlk olarak neden pdo kullanmalıyız bu konuyla başlayalım.
En güncel veri tabanı taşıyıcısı olması.
OOP sayesinde düzenli çalışmalarımızı pdo kullanarak gerçekleştirebiliriz.
PDO dan önce veritabanı bağlantısı için bir fonksiyon (mysql_) kullanmak zorundaydık. Ancak PDO ile buna ihtiyaç kalmadı.
Bindparam fonksiyonu ile sql injection'un büyük ölçüde önüne geçebiliriz. Aşağıda veri ekleme yaparken bunun kullanımını göreceğiz.

Gelelim veritabanı bağlantısı işlemine

PHP:
$dsn = "mysql:host=localhost;dbname=veritabanıadı;charset=utf8mb4";//veritabanı adını girin
$user = "kullanıcıadı";//kullanıcı adını girin
$passwd = "şifre";//şifreyi adını girin

$db = new PDO($dsn, $user, $passwd);

$db-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_WARNING);

mysqli arasındaki fark yukarıda belirttiğim gibi mysqli_ gibi bir kullanımın pdo da olmayışı. Hatırlamak adına mysqli'yide ekleyeyim.

PHP:
$conn = mysqli_connect($servername, $username, $password, $database);

Pdo ile veri ekleme işlemine gelelim.

PHP:
                //post edilen verileri değişkenlere aktarıyoruz..       
                $unvan = strip_tags($_POST['unvan']);
                $aciklama = strip_tags($_POST['aciklama']);
                if(!$isim or  !$aciklama or !$unvan ){echo'Boş Alan Bırakma';}else{
                    
                    $SqlSorgusu = "INSERT INTO veritabanıadı (isim,unvan,aciklama) VALUES (:isim, :unvan, :aciklama)";

                $st = $db->prepare($SqlSorgusu);
                
                $st->bindParam(':isim', $isim,PDO::PARAM_STR);
                $st->bindParam(':unvan', $unvan,PDO::PARAM_STR);
                $st->bindParam(':aciklama', $aciklama,PDO::PARAM_STR);
                 $st->execute();
                     if($st){
                        echo"Veri Eklendi Sayfayı Yenileyin";
                    }else{
                        echo'Başarısız';}
                    }

Gördüğünüz gibi gelen bind param ile sorgulayıp sonrasında veritabanına ekledik. Bu sorgulama işlemini string üzerinden yaptığımız için bindparam içinde PDO: PARAM_STR kullandık. Eğer integer bir değer gireceksek PARAM_INT yazacaktık.
PDO ile veri güncellemeye gelelim.

PHP:
    $isim=$_POST['isim'];
    $unvan=$_POST['unvan'];
    $aciklama=$_POST['aciklama'];

$guncelle = $db->prepare("UPDATE veritabanıadı SET isim=:isim, unvan=:unvan, aciklama=:aciklama WHERE id=:id");            //verimizi güncellemek için
                    $guncelle->execute([':id'=>$cekilen_id,':isim'=>$isim,':unvan'=>$unvan,':aciklama'=>$aciklama]);                                    
                    
                    if($guncelle){
                        echo    "Veri Güncellendi";
                        
                        }else{
                        echo'olmadı';}

Veri Silme örneği.

PHP:
if (!is_numeric($cekilen_id)) {//burada gelen id nin sayı olup olmadığı test edildi
echo 'Id sadece sayı olur';   
}else{
    
$sil =$db->exec("DELETE FROM veritabanıadı WHERE id=$cekilen_id");        //verimizi veritabanından siliyoruz
$db=null;

}

Veri silme işlemi için çekilen id'nin sayı olup olmadığının güvenlik amacıyla kontrolünü yaptırıyoruz.
Tabi ki siz en üste kullanıma göre session kontrolü de ekleyebilirsiniz.

Ve sıra geldi listeleme kısmına.

PHP:
$db = $db->query("SELECT * FROM ekip order by id asc"); //asc ile id ye göre artan şekilde sıralıyoruz desc yapsaydık sondan başlardı..

  $oku = $db->fetchAll(PDO::FETCH_ASSOC); //verilerin hepsi eğer birini alacaksak sadece fetch olacaktı
  foreach ($oku as $row) {
  extract($row);
  echo "Adı Soyadı = ".$isim." Meslek/Ünvanı = ".$unvan." Mesajı = ".$aciklama." ===> <a href='ekipguncelle.php?id=$id'>Güncelle</a> || <a href='ekipsil.php?id=$id'>Sil</a><br><br></div>";
  }

Burada yaptığımız işlem ile tüm verileri istediğimiz sırayla çekip ki ben burada asc ile çekip listeledim. ve her birinin id değerini güncelle ve sil sayfalarına yönlendirdim ki güncelle veya sil yazısına tıklanırsa direkt olarak onun id değerine göre veriler güncelle sayfasına gelsin veya sil sayfasından silme işlemi yapılsın.

Bir diğer yöntem ise echo kullanmadan veri listeleme

PHP:
<?php
                    $sorgu = $db->prepare("SELECT * FROM veritabanıadı order by id");                //istenilen id deki veriyi çekme
                    $sorgu->execute();
                    if($sorgu->rowCount()){
                    $row=$sorgu->fetch(PDO::FETCH_ASSOC);
                    ?>
                        <b><?php echo $row['isim'];?> </b><br>
                        <b><?php echo $row['unvan'];?></b><br>
                        <b><?php echo $row['aciklama'];?></b><br><br>

                    <?php
        }?>
bu kullanımda ise yine tüm verileri çekiyoruz ancak row içine fetch ile atıyoruz. Buda bizim sergi sayfamızda diğer yöntemdeki gibi echo kullansaydık bundan oluşan tasarım zorluğu, çift tırnak içinde tek tırnak kullanma gibi kurallara uygun kodlama yapma derdinden kurtardı. Eğer tüm verileri değilde sondan 3 veriyi çekeceksek

PHP:
SELECT * FROM  veritabanıadı order by id desc limit 3

siz desc i asc yapıp verileri baştan çekebilirsiniz ve limit 3 yerine limit 5 yazsaydın 5 adet veriyi çekebilirsiniz.

Bu günlük anlatacaklarım bu kadar

İyi Forumlar
 

ertan074

Üye
13 May 2021
126
60
Merhaba Arkadaşlar

Bu gün sizlerle php'de pdo kullanımının önemini, veritabanı bağlantısını, veri ekleme, güncelleme, silme ve listeleme işlemlerine bakacağız.

İlk olarak neden pdo kullanmalıyız bu konuyla başlayalım.
En güncel veri tabanı taşıyıcısı olması.
OOP sayesinde düzenli çalışmalarımızı pdo kullanarak gerçekleştirebiliriz.
PDO dan önce veritabanı bağlantısı için bir fonksiyon (mysql_) kullanmak zorundaydık. Ancak PDO ile buna ihtiyaç kalmadı.
Bindparam fonksiyonu ile sql injection'un büyük ölçüde önüne geçebiliriz. Aşağıda veri ekleme yaparken bunun kullanımını göreceğiz.

Gelelim veritabanı bağlantısı işlemine

PHP:
$dsn = "mysql:host=localhost;dbname=veritabanıadı;charset=utf8mb4";//veritabanı adını girin
$user = "kullanıcıadı";//kullanıcı adını girin
$passwd = "şifre";//şifreyi adını girin

$db = new PDO($dsn, $user, $passwd);

$db-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_WARNING);

mysqli arasındaki fark yukarıda belirttiğim gibi mysqli_ gibi bir kullanımın pdo da olmayışı. Hatırlamak adına mysqli'yide ekleyeyim.

PHP:
$conn = mysqli_connect($servername, $username, $password, $database);

Pdo ile veri ekleme işlemine gelelim.

PHP:
                //post edilen verileri değişkenlere aktarıyoruz..       
                $unvan = strip_tags($_POST['unvan']);
                $aciklama = strip_tags($_POST['aciklama']);
                if(!$isim or  !$aciklama or !$unvan ){echo'Boş Alan Bırakma';}else{
                    
                    $SqlSorgusu = "INSERT INTO veritabanıadı (isim,unvan,aciklama) VALUES (:isim, :unvan, :aciklama)";

                $st = $db->prepare($SqlSorgusu);
                
                $st->bindParam(':isim', $isim,PDO::PARAM_STR);
                $st->bindParam(':unvan', $unvan,PDO::PARAM_STR);
                $st->bindParam(':aciklama', $aciklama,PDO::PARAM_STR);
                 $st->execute();
                     if($st){
                        echo"Veri Eklendi Sayfayı Yenileyin";
                    }else{
                        echo'Başarısız';}
                    }

Gördüğünüz gibi gelen bind param ile sorgulayıp sonrasında veritabanına ekledik. Bu sorgulama işlemini string üzerinden yaptığımız için bindparam içinde PDO: PARAM_STR kullandık. Eğer integer bir değer gireceksek PARAM_INT yazacaktık.
PDO ile veri güncellemeye gelelim.

PHP:
    $isim=$_POST['isim'];
    $unvan=$_POST['unvan'];
    $aciklama=$_POST['aciklama'];

$guncelle = $db->prepare("UPDATE veritabanıadı SET isim=:isim, unvan=:unvan, aciklama=:aciklama WHERE id=:id");            //verimizi güncellemek için
                    $guncelle->execute([':id'=>$cekilen_id,':isim'=>$isim,':unvan'=>$unvan,':aciklama'=>$aciklama]);                                    
                    
                    if($guncelle){
                        echo    "Veri Güncellendi";
                        
                        }else{
                        echo'olmadı';}

Veri Silme örneği.

PHP:
if (!is_numeric($cekilen_id)) {//burada gelen id nin sayı olup olmadığı test edildi
echo 'Id sadece sayı olur';   
}else{
    
$sil =$db->exec("DELETE FROM veritabanıadı WHERE id=$cekilen_id");        //verimizi veritabanından siliyoruz
$db=null;

}

Veri silme işlemi için çekilen id'nin sayı olup olmadığının güvenlik amacıyla kontrolünü yaptırıyoruz.
Tabi ki siz en üste kullanıma göre session kontrolü de ekleyebilirsiniz.

Ve sıra geldi listeleme kısmına.

PHP:
$db = $db->query("SELECT * FROM ekip order by id asc"); //asc ile id ye göre artan şekilde sıralıyoruz desc yapsaydık sondan başlardı..

  $oku = $db->fetchAll(PDO::FETCH_ASSOC); //verilerin hepsi eğer birini alacaksak sadece fetch olacaktı
  foreach ($oku as $row) {
  extract($row);
  echo "Adı Soyadı = ".$isim." Meslek/Ünvanı = ".$unvan." Mesajı = ".$aciklama." ===> <a href='ekipguncelle.php?id=$id'>Güncelle</a> || <a href='ekipsil.php?id=$id'>Sil</a><br><br></div>";
  }

Burada yaptığımız işlem ile tüm verileri istediğimiz sırayla çekip ki ben burada asc ile çekip listeledim. ve her birinin id değerini güncelle ve sil sayfalarına yönlendirdim ki güncelle veya sil yazısına tıklanırsa direkt olarak onun id değerine göre veriler güncelle sayfasına gelsin veya sil sayfasından silme işlemi yapılsın.

Bir diğer yöntem ise echo kullanmadan veri listeleme

PHP:
<?php
                    $sorgu = $db->prepare("SELECT * FROM veritabanıadı order by id");                //istenilen id deki veriyi çekme
                    $sorgu->execute();
                    if($sorgu->rowCount()){
                    $row=$sorgu->fetch(PDO::FETCH_ASSOC);
                    ?>
                        <b><?php echo $row['isim'];?> </b><br>
                        <b><?php echo $row['unvan'];?></b><br>
                        <b><?php echo $row['aciklama'];?></b><br><br>

                    <?php
        }?>
bu kullanımda ise yine tüm verileri çekiyoruz ancak row içine fetch ile atıyoruz. Buda bizim sergi sayfamızda diğer yöntemdeki gibi echo kullansaydık bundan oluşan tasarım zorluğu, çift tırnak içinde tek tırnak kullanma gibi kurallara uygun kodlama yapma derdinden kurtardı. Eğer tüm verileri değilde sondan 3 veriyi çekeceksek

PHP:
SELECT * FROM  veritabanıadı order by id desc limit 3

siz desc i asc yapıp verileri baştan çekebilirsiniz ve limit 3 yerine limit 5 yazsaydın 5 adet veriyi çekebilirsiniz.

Bu günlük anlatacaklarım bu kadar

İyi Forumlar
Emeğine sağlık çok güzel olmuş
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.