İyi günler bu yazımda Php ile Pdo kullanarak veri ekleme ve listeleme yapacağız.Daha önceki yazımda Mysqli kullanarak veritabanı bağlantısını gerçekleştirip veri ekleme ve listeme yapmıştık.O yazıya linkten ulaşabilirsiniz.
http://fatihdemirag.net/php-mysql-kayit-ekleme-ve-listeleme/
Peki neden PDO kullanmalıyız sorusuna gelecek olursak.Öncelikle PDO daha güvenli ve xss açıkları gibi açıklar için önlemleri var.Laravel framework ve çoğu modern sistem mysqli yerine artık pdo ile çalışıyor.Birçok veritabanı sistemine bağlantısı ise çok kolay.Sadece bağlantı cümlesinde ki driveri değiştirerek bağlantı yapabiliyoruz.PDO kullanmak için ise kullanacağınız veritabanının Php eklentisini aktif etmeyi unutmayın.Mysql için pdo_mysql eklentisin çalıştığına emin olun aksi takdirde bağlantı sağlanmayacaktır.
Bu yazımda da önceki yazımda olduğu gibi MySQL kullanacağım.Bağlantı işlemleri yapmadan önce bir adet veritabanı açmanız ve tablo oluşturmanız gerekiyor.
CREATE TABLE `test`.`bilgiler` ( `id` INT NOT NULL AUTO_INCREMENT, `ad` VARCHAR(25) NULL, `soyad` VARCHAR(25) NULL, PRIMARY KEY (`id`));
Test veritabanında bilgiler adında bir tablo oluşturdum ve örnekleri bu tablo üzerinden yapacağım.Sizde Test veritabanı oluşturduktan sonra bu kod ile bilgiler tablosunu oluşturabilirsiniz.
Şimdi işin en eğlenceli kısmı olan kodlama kısmına geçelim. ?
Pdo Mysql Bağlantısı
Öncelikle veritabanı bağlantısı oluşturmamız gerekiyor.Bu aşamada pdo bize çok kolaylık sağlıyor.Tek satır bağlantı cümlesi ile bağlanıyoruz.Farklı bir veritabanına bağlanmak istersek sadece driveri değiştiriyoruz ve bağlantı sağlıyoruz.
$db=new PDO("mysql:host=localhost;dbname=test;charset=utf8","dbKullaniciAdi","dbSifre");
Bu satırda bağlantı işlemini yapıyoruz.Pdo bizden veritabanı driveri,host,kullanıcı adı ve şifre parametreleri istiyor.Bağlantımız sağlanmış mı sağlanmamış mı onun kontrolünü yapalım.
try{ $db=new PDO("mysql:host=localhost;dbname=test;charset=utf8","dbKullaniciAdi","dbSifre"); if ($db) { echo "Veritabanı bağlantısı başarılı"; } else echo "Veritabanı bağlantısı başarısız"; }catch (PDOException $exception) { print $exception->getMessage(); } $db=null; ?>
Kodumu herhangi bir hata çıkınca yakalamak için try-catch içerisine aldım.Bu sayede hataları yakalamak daha kolay oluyor.
$db=null satırı veritabanı bağlantısı kapatmak için kullanılıyor.Yani mysqli_close($db) ile aynı işi yapıyor.
Bu kodu çalıştırdığımızda karşımıza ‘Veritabanı bağlantısı başarılı’ mesajı dönüyorsa bağlantımız sağlanmıştır.
Kayıtları Listeleme
Şimdi de tablodan verileri nasıl çekiyoruz ona bakalım.Burda da pdo bize çok kolaylık sağlıyor.Sql cümlesi çalıştırdığımız satırda bilgileri fetch ediyor ve bizim bir daha sql’i fetch etmemize gerek kalmıyor.Döngü ile de fetch edilen satırları kolayca çekebiliyoruz.Kodu çalıştırdığımız da aşağıdaki gibi adların yazdığını görüyoruz.Tabi veritabanında kayıt varsa?
$sql=$db->query("select * from bilgiler",PDO::FETCH_ASSOC); foreach ($sql as $satir) { echo $satir['ad']."<br>"; }
Kayıt Ekleme
Şimdi verilerin nasıl eklendiğine bakalım.Pdo ile veri eklerken mysqli de kullanılan yöntemden farklı şekilde veri eklemesi yapılır.Mysqli de parametreler direk sql cümlesinin içine yazılırken pdo da parametreler sql çalıştırırken verilir.Bu şekilde pdo sql injection açıklarının önüne geçer.
Ekleme örneğimizde bir adet form olacak ve o formdan bilgileri alıp veritabanına kaydedeceğiz.Form kodları aşağıdaki gibidir.Burda formun gönderileceği adres ve input etiketlerinin name özellikleridir.Formun gönderileceği sayfa unutulmamalıdır ve name etiketleri boş gönderilmemelidir.Name etiketi ile parametreleri alıp ekleyeceğiz.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.6/umd/popper.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js"></script> </head> <body> <div class="container"> <form action="ekle.php" method="post" class="form-control"> <input type="text" placeholder="Ad" name="ad" class="form-control"> <input type="text" placeholder="Soyad" name="soyad" class="form-control"> <input type="submit" value="Kaydet"> </form> </div> </div> </body> </html>
ekle.php
try{ $db=new PDO("mysql:host=localhost;dbname=test;charset=utf8","dbKullaniciAdi","dbSifre"); $ad=$_POST["ad"]; $soyad=$_POST["soyad"]; $sql = $db->prepare("insert into bilgiler set ad=:ad,soyad=:soyad"); $ekle = $sql->execute(array( "ad" => $ad, "soyad" => $ad, )); if ($ekle) echo "Kayıt eklendi"; else echo "Kayıt eklenemedi"; } catch (PDOException $exception) { print $exception->getMessage(); } $db=null;
Ekleme sayfamız bu şekildedir.$_POST olarak gönderilen verileri değişkene aldık ve sql cümlesine parametre olarak gönderdik.Dediğim gibi pdo’da sql cümlesine parametreleri sql cümlesi çalıştırırken gönderiyoruz.
Form verilerini gönderdikten sonra ‘Kayıt eklendi’ mesajı alıyorsanız işlem tamamlanmıştır.Eğer hata olursa benle iletişime geçebilirsizi.
Bu yazımda Pdo ile Mysql veritabanına ekleme ve listeme yaptım.Bu ikisini yaptıktan sonra güncelleme ve silme işlemleri çok farklı olmadığı için ve yazıyı daha fazla uzatmamak için yazmadım.
Herkese iyi kodlamalar ?