Kategoriler
mysql hakkında Öylesin Esti Php ve mysql Programlama Dilleri Webmaster yardım

PDO ve mysql işlemleri – [Başlangıç ve orta düzey] : Ekleme, silme, güncelleme, listeleme, bağlanma

PDO: gelişmiş veri tabanı yönetimi eklentisidir. Php nin yeni versiyonları ile hayatımıza girmeye başlayan bu uygulama bir çok veritabanını destekliyor. Böylece veritabanı modeli değiştirmek zorunda kaldığımızda php kodlarımızı silbaştan tekrar değiştirmek zorunda kalmayacağız. Çünkü PDO ile hazırlanan sorgu cümlecikleri desteklenen bütün veritabanı modellerinde geçerli olacak. size sadece başlangıç bağlantı sorgusunuz düzeltmek kalıyor.

PDO’nun desteklediği veri tabanı modelleri:
Cubrid
FreeTDS / Microsoft SQL Server / Sybase
Firebird/Interbase 6
IBM DB2
IBM Informix Dynamic Server
MySQL 3.x/4.x/5.x
Oracle Call Interface
ODBC v3 (IBM DB2, unixODBC and win32 ODBC)
PostgreSQL
SQLite 3 and SQLite 2
Microsoft SQL Server / SQL Azure

Php geliştiricileri artık php ve veritabanı programcılarına PDO yapısına geçmeleri konusunda tavsiyelerde bulunuyorlar. Ciddi anlamda da ilerleyen yıllarda PDO yapısının artık eski sistemlerin yerini alacağını düşünüyorum. Her şekilde öğrenmesi zor ve hantal sorgulardan bizi kurtaran yeni PDO programı Türk gençleri tarafından da bir an önce benimsenmeli ve kullanılmaya başlanmalı.

PDO ilk başlarda size zor gelebilir ancak sonrasında öğrendikçe zevkli olduğunu ve programlamasının kolaylığı ile heycanlandığınızı göreceksiniz. 3-4 ay önce PDO sistemine geçmek istediğimde düzgün bir anlatım bulamamıştım. Henüz 2 hafta falan oldu hobi amaçlı başladığım PDO uygulamasına yönelik tecrübelerimi yeni ve bunu öğrenmek isteyen kişilerle paylaşacağım.

Tavsiye: Bu konuda dökumanlardan çok sizin konuyu ne kadar öğrenmek istediğiniz önemlidir. Bilgisayarınızda bir localhost kurarak test ortamı hazırlayın. Hataları, doğruları test ederek gördüğünüzde öğrenmek dahada kolaylaşacaktır.

PDO konusunda şuan için başlangıç ve orta seviyesindeki konulara yer vereceğim. Aşağıdaki dökumanda yer vermediğim bir çok parametrede olacaktır. bunlara zamanım olduğunda yer vereceğim. Şuan için orta derece bir bilgiye bu dökuman ile ulaşabileceksiniz. Sonrasında zaten kendiliğinden yeteneğiniz artacaktır.

Öncelikle veritabanı bağlantı kod parçacığımızı ele alıp bağlantıyı sorunsuz gerçekleştirelim.

PDO Mysql veri tabanı bağlantısı

	<?php
	$host = "localhost";
	$dbismi = "test"; // Database ismi
	$dbkullanici = "root"; // Database kullanici adi
	$dbsifre = ""; // Kullanici sifresi

	try {
		$dbpdo = new PDO("mysql:host={$host};dbname={$dbismi}", $dbkullanici, $dbsifre, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
		$dbpdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
	} catch (PDOException $e) {
		return 'Baglanti hatasi '. $e->getMessage();
	}
	/* basit select kodu */
	$as = $dbpdo->query('SELECT * FROM galeriler');

	foreach($as as $row) {
	echo $row["ismi"]."<br>";
	}
?>

PDO php’nin yan uygulaması olarak geliyor. bazı sunucularda aktif edilmemiş olabilir. Apacheyi derlerken pdo bölümünüde seçemniz gerekli, bunun yanında mysql ve php ilişiğini sağlayan diğer yan uygulamalarıda seçmeniz gerekli (şuan isimleri aklımda değil :=)). Ayrıca PDO phpnin 5.1.x versiyonu dahil yeni sürümlerinde desteklenmektedir. Eski versiyon php programınız varsa güncellemenizi öneririm..

PDO::QUERY Mysql Select komutu

Select komutunu 2 ayrı başlıkta inceleyeceğiz arkadaşlar. İlki tek veriyi, tabloyu çekerek işlem yapma, diğeri ise birden fazla sonucu foreach yada while ile işleme alma. Yeni başlayanların yada yanlış bilenlerin ve daha hızlı hafif sorgular oluşturabilmeniz için gerekli olan PDO parametrelerinede bildiğim kadarıyla yer vermeye çalışacağım.

1 – Tek veri işleme:

Sorgumuz aşağıdaki gibi olacaktır:

$veri = $dbpdo->query('SELECT * FROM galeriler WHERE id = 3');
$veri = $veri->fetch(PDO::FETCH_ASSOC);

print_r($veri);
/*
Çıktı bu şekilde olur:

Array ( 
[id] => 3 
[ismi] => Backgrounds 
[aciklama] => Background displays can bring your computer screen to life. 
[userid] => 20 
)
*/

echo $veri["ismi"]; /* çıktı: Backgrounds */

Bazı arkadaşlar direk fetch() diğer kullanıyor ancak bu yanlıştır. parantezler arasına PDO parametlerini koyarak size en uygun veri biçimini çekerseniz gereksiz gelecek verilerden ve harcanacak zamandan kurtulursunuz. Bu alanda kullanabileceğiniz PDO parametlerine kısa bir göz atalım:

PDO::FETCH_ASSOC: veriyi stun ismi ile çeker. Örnek:

Array
(
    [ismi] => Backgrounds
    [aciklama] => fisfisda fisfis
)

PDO::FETCH_BOTH: Veriyi karşık çeker, yani hem stun ismiyle hemde sayısal değeri ile karışık iki bölüm işler. Eğer boş bırakırsanız bu kısım default olarak işleme alınacaktır. Eğer sadece stun ismiyle iş yapacaksanız yukarıdaki parametreyi kullanız, aksi taktirde fazladan veri ile belleği şişirmiş oluruz. bu veri her ne kadar küçük olsada çok büyüyecek bir sitede ilerde kendini hissetirmeye başlayacaktır. bu parametre sonucunda oluşacak array diziside bu şekilde:

Array
(
    [ismi] => Backgrounds
    [0] => Backgrounds
    [aciklama] => fisfisda fisfis
    [1] => fisfisda fisfis
)

Sonraki parametreleri tam olarak bilmiyorum ama üzerinden geçmekte fayda var.

PDO::FETCH_LAZY: Sonuçları array yerine PDORow Object yöntemi ile listeliyor, sorgu parametresinide queryString ismine atıyor. php.netdeki açıkmalası: Her özelliğin bir sütun ismine denk düştüğü bir anonim nesne olarak. Örnek çıktı aşağıdaki gibidir:

PDORow Object ( 
[queryString] => SELECT * FROM galeriler WHERE id = :gaid 
[id] => 3 
[ismi] => Backgrounds 
[aciklama] => Background displays can bring your computer screen to life. 
[userid] => 20 
)

PDO::FETCH_OBJ: Sonuçları stdClass Object şeklinde listeliyor, php.net deki açıklaması: Her özelliğin bir sütun ismine denk düştüğü bir anonim nesne olarak. Örnek çıktı aşağıdaki gibidir:

stdClass Object ( 
[id] => 3 
[ismi] => Backgrounds 
[aciklama] => Background displays can bring your computer screen to life.
[userid] => 20 
)

Ben genelde sorgularımı stun ismine göre çekiyorum. Böylece kafam karışmıyor ama uygulamanıza hangisi uygunsa ona görede diğer parametreleri kullanabilirsiniz. Yeni başlayanlar ve basit işlemler için kullanacak arkadaşlar için ilk parametreyi yani PDO:FETCH_ASSOC‘u öneririm.

PDO::FETCH_COLUMN: Select kısmında belirlenen sütunda bulunan bütün veriyi sayı dizgesi ile listeler. Eğer select kısmında ön tanımlı bir değer yoksa (*), birden fazla varsa ilk kolonu ele alarak listeleme yapar. Örnek dönen sonuç aşağıdaki gibidir:

Array (
[0] => mehmet cavus 
[1] => Anime 
[2] => Backgrounds 
[3] => Cars 
[4] => Colors 
[5] => Families 
[6] => Fashion 
[7] => Funny 
[8] => Just for Fun 
[9] => Love
)

PDO::FETCH_GROUP: Verileri belirlenen ilk sütuna göre gruplandırarak işlem yapar. Tek başına kullanıldığında ikinci tablonun isminin altına birde sayısal değeri ile ikinci veriyi ekler. sadece isim değerini alması için aynı parametreyi PDO::FETCH_ASSOC ile kullanmanızı öneriyorum yanı bu şekilde: PDO::FETCH_ASSOC|PDO::FETCH_GROUP

Bu parametreninde sonuçları örnekteki gibi olur:

Array (

[Anime] => Array ( 
[0] => Array ( 
[aciklama] => Search through all your favorite anime characters. 
) 
) 

[Backgrounds] => Array ( 
[0] => Array ( 
[aciklama] => Background displays can bring your computer screen to life. 
) 
) 

[Cars] => Array ( 
[0] => Array ( 
[aciklama] => Make a pit stop to check out everything about cars. 
) 
) 

[Colors] => Array ( 
[0] => Array ( 
[aciklama] => Search through unique images from all the colors of the rainbow… 
) 
) 

[Families] => Array ( 
[0] => Array ( 
[aciklama] => They are the cornerstones of our lives. Celebrate your family here. 
) 
)

)

PDO::FETCH_UNIQUE – Select alanındaki ilk tabloyu baz alarak benzersiz içerikleri listeler. Eski mysql de distintc ile aynı verileri eleyip sadece birini alıyorduk. PDO uygulamasında da işimizi kolaylaştıracak FETCH_UNIQUE parametresini kullanacağız. Yanlış hatırlamıyorsam PDO daki benzersiz kayıt parametresinin eskisine nazaran çok daha kullanışlı oluyor. Çünkü distinct de sadece belirtilen benzersiz kayıtları çekeceğimiz sütununa ait verileri alabiliyorduk. PDO daki bu parametre ile benzersiz kayıtları alacağımız sütun haricinde diğer sütunlarıda kolaylıkla çekebiliyoruz. Bu parametrenin yanında yine PDO::FETCH_ASSOC parametresiyle beraber kullanımı önereceğim, böylece sadece sayısal dizgeleri çekmeden hafif sonuçlar elde edebiliriz. Bu parametre örneğide aşağıdaki gibi olur:

PDO::FETCH_ASSOC|PDO::FETCH_UNIQUE parametrelerinin sonuçları:

array (size=51)
  'mehmet cavus' => 
    array (size=3)
      'aciklama' => string 'hhhh demi aciklamasi yeni buda..' (length=32)
      'id' => string '1' (length=1)
      'userid' => string '645' (length=3)
  'Anime' => 
    array (size=3)
      'aciklama' => string 'Search through all your favorite anime characters.' (length=50)
      'id' => string '2' (length=1)
      'userid' => string '20' (length=2)
  'Backgrounds' => 
    array (size=3)
      'aciklama' => string 'Background displays can bring your computer screen to life.' (length=59)
      'id' => string '3' (length=1)
      'userid' => string '20' (length=2)
  'Cars' => 
    array (size=3)
      'aciklama' => string 'Make a pit stop to check out everything about cars. ' (length=52)
      'id' => string '4' (length=1)
      'userid' => string '20' (length=2)

2 – Birden fazla veriyi çekme:
Yukarıdaki işlemleri anladıysanız bu kısmı çok kolayca kavrayacaksınız diye düşünüyorum, çünkü fazla bir ayrıntı yok. yukarıdaki sorgu kodumuzdan sadece fetch() kısmını fetchAll() olarak değiştirerek çoklu veri çekimleri için kullanacağız. Sonrasında çektiğimiz veriyi foreach yada while ile işleyebiliriz.

$veri1 = $dbpdo->query('SELECT * FROM galeriler');

print_r($veri1->fetchAll(PDO::FETCH_ASSOC));

Bu işlem sonunda ekrana tahmin edebileceğiniz gibi galeriler tablosundaki bütün veriler çekilecektir. Bunları foreach ile kolayca işleyebiliriz:

$veri1 = $dbpdo->query('SELECT * FROM galeriler');

$sonuc = $veri1->fetchAll(PDO::FETCH_ASSOC);

foreach($sonuc as $cek){

echo $cek["ismi"]."<br>";

}

Basit query ile select yöntemini işledik arkadaşlar. Daha profesyonel kullanım için PDO da bir çok fonksiyon bulunmakta. Şimdi size PDO da en çok sevdiğim ve bence eski mysql sorgularını bir daha kullanmamanıza neden olacak parametre: prepare

Detaylı prepare konusuna geçmeden önce hızlı şekilde silme,ekleme,güncelleme kodumuzu yazmak istiyorum. fonksiyonun adı exec(). Extra tanımlamalara gerek kalmadan hızlıaca işlemlerinizi yapmaya olanak veriyor. Bir kaç örnek vererek sizi bilgilendirip sonrada bunların daha detaylısı ve profesyonel yapıda olanı prepare kullanımına geçeceğim:

PDO::EXEC – Hızlı Veri silme

$sorgumuz = $dbpdo->exec("delete from galeriler where id = 235");

echo $sorgumuz; /*etkilenen satir sayisini verir - 1 ise silinmistir :) */

PDO::EXEC – Hızlı Veri güncelleme

$sorgumuz = $dbpdo->exec("update galeriler set ismi = 'mehmet cavus' where id = 1");

echo $sorgumuz; /*etkilenen satir sayisini verir - 1 ise silinmistir :) */

PDO::EXEC – Hızlı Veri ekleme

$sorgumuz = $dbpdo->exec("insert into galeriler(ismi) values('mehmet cavus yemenli')");

echo $sorgumuz; /*etkilenen satir sayisini verir - 1 ise silinmistir :) */

PDO::prepare:

Standart açıklama yerine kendi tecrübelerimi ve test sonuçlarımı paylaşacağım arkadaşlar. Büyük bir projeniz varsa yada aynı sorgunu sadece where alanındaki parametresi değişiyor diye 5-6 kere kullanmak zorunda kalıyorsanız, prepare komutu işlerinizi çok kolaylaştıracak hemde iş yükü zamanınızı çok düşürecek. Fazla kafa karıştırmadan bir kaç örnekle prepare kullanımını daha iyi anlamanıza vesile olayım.

PDO::PREPARE parametresini açıkmak için size bir örnek kod hazırladım:

$veri = $dbpdo->prepare('SELECT * FROM galeriler WHERE userid = :userid');

$veri->bindValue(':userid', 2, PDO::PARAM_INT); 
$veri->execute();
print_r($veri->fetchAll(PDO::FETCH_ASSOC)); /* userid 2 olan butun tabloları çeker */

echo "<hr>";

$veri->bindValue(':userid', 3, PDO::PARAM_INT);
$veri->execute();
print_r($veri->fetch(PDO::FETCH_ASSOC)); /* userid 3 olan ilk tabloyu (tek) çeker */

echo "<hr>";

$veri->bindValue(':userid', 20, PDO::PARAM_INT);
$veri->execute();
print_r($veri->fetchAll(PDO::FETCH_ASSOC)); /* userid 20 olan butun tabloları çeker */

/* her işlem ayrı ayrı çalışır, üstdeki ile bir bağı yoktur.. */

Yukarıdaki göreceğiniz gibi sadece bir sorgu cümlesi hazırladık ve alt tarafta 3 ayrı birbirinden farklı sonuç listeledik. Kafanız karışmasın arkadaşlar. alt alta yazdığınız her yeni kural üstdeki yani bir önceki kural ile alakası yoktur. Yaptığınız her execute() bir üstünde belirttiğiniz bindValue() parametresindeki kuralı işler. Böylece tek sorgu ile bir tablodaki 3 üyenin galerilerini ister birini, istersenizde hepsini ayrı ayrı çekmiş olduk.

Bunun bize getireceği kolaylıklar neler derseniz: Aynı anda tek bir sorgu cümlesini kullanarak güncelleme, silme, yada veri çekme yapabilirsiniz birdenf azla. Bu mantık işi, kullanabileceğiniz alanlar tamimiyle hayal gücünüze bağlı..

PDO::PREPARE komutu ile sadece veri çekme işi değil, silme, ekleme, güncelleme işlemleride yapabiliriz. PDO daki en iyi alanlardan birisi güvenlik uygulamalarınıda beraberinde kullanarak sistemimizi güven altına alabiliriz.

PDO::PREPARE ile veri ekleme:

Birden fazla yönetmi bulunmakla beraber kullanım alanınıza göre özelleştirebilirsiniz arkadaşlar.. İlk göstereceğim kullanım uygulamanın en kolayı olacak.

$yeniisim = "yeni galeri ismi";
$yeniaciklama = "galeri aciklamasi yeni buda..";

$sorgumuz = $dbpdo->prepare("INSERT INTO galeriler(ismi,aciklama) VALUES(:ismi,:aciklama)");

$sorgumuz->execute(array(':ismi' => $yeniisim, ':aciklama' => $yeniaciklama));

$etkilenen_veri_sayisi = $sorgumuz->rowCount();

echo $etkilenen_veri_sayisi;

Yukarıdaki sorguyu çalıştırdığınızda veritabanına yeni veri ekleyecektir ve geri olarak rowCount() parametresi ilede etkilenen yada eklenen veri sayısını verecektir bize.

Yukarıdaki veri ekleme yönetminin biraz farklı olanı ise sorguda soru işareti kullanabileceğimiz ve array kısmınıda sırakı değişkenler olarak atayabileceğimiz yöntem. Burda değişkenlerin sırasına dikkat edin, sırayla soru işaretlerinin olduğu yerlere atanmaktadır..

$yeniisim = "en yeni galeri ismi";
$yeniaciklama = "en galeri aciklamasi yeni buda..";

$sorgumuz = $dbpdo->prepare("INSERT INTO galeriler(ismi,aciklama) VALUES(?,?)");

$sorgumuz->execute(array($yeniisim, $yeniaciklama));

$etkilenen_veri_sayisi = $sorgumuz->rowCount();

echo $etkilenen_veri_sayisi;

İşi biraz daha büyütüp eklenecek veri güvenliğini en ideal şekilde kontrol edecek aşağıdaki gibi bir işlem yapabilirsiniz:

$yeniisim = "fyeni galeri ismi";
$yeniaciklama = "ggaleri aciklamasi yeni buda..";

$sorgumuz = $dbpdo->prepare("INSERT INTO galeriler(ismi,aciklama,userid) VALUES(:ismi,:aciklama,:userid)");

$sorgumuz->bindValue(':ismi', $yeniisim, PDO::PARAM_STR);
$sorgumuz->bindValue(':aciklama', $yeniaciklama, PDO::PARAM_STR);
$sorgumuz->bindValue(':userid', 24, PDO::PARAM_INT);

$sorgumuz->execute();

$etkilenen_veri_sayisi = $sorgumuz->rowCount();

echo $etkilenen_veri_sayisi;

Ekleyeceğiniz her veriyi sorguya ekledikten sonra bindValue() paremetresi ilede eklenecek veriyi hazırlıyoruz. Son olarak execute() fonksiyonunu çalıştırdığımızda işlem çalışmaya başlauacak ve altda etkilenen satır sayısını verecektir..

PDO – Eklenen son verinin ID2sini alma:
INSERT işleminden sonra eklenen veriye ait ID’yi almak zorunda olabilirsiniz. Bu gibi durumlarda Aşağıdaki değişken bize eklenen son verinin ID’sini verecektir..

$sorgumuz = $dbpdo->exec("insert into galeriler(ismi) values('mehmet cavus yemenli')");

echo $sorgumuz . "<br>"; /*etkilenen satir sayisini verir - 1 ise silinmistir :) */
echo $dbpdo->lastInsertId(); /* Eklenen son verinin ID si. */

PDO::PREPARE fonksiyonu ile silme, ekleme, güncelleme gibi işlemleride yukarıdaki gibi yapabiliyornuz. Konuyu anladığınızı düşünüyorum prepare kısmında fazla detaya girmeden kısa kısa örneklerle bilgilerimizi pekiştirelim.

PDO::PREPARE – Tablodaki verileri Güncelleme:

PDO da farkeden tek şey mysql standart fonksiyonları yerine PDO class yapısını ve ek olarak ekleyeceğimiz verileri ayrı bir alanda işleyerek yapmamızdır. Bunun güvenilirliği konusunda tecrübem yok ancak yapı itibari ile bunun hazırlanmış olduğunu düşünüyorum. Örnek bir veri güncelleme yapısı:

$yeniisim = "fyeni galeri ismi";
$yeniaciklama = "ggaleri aciklamasi yeni buda..";

$sorgumuz = $dbpdo->prepare("update galeriler set ismi = :ismi ,aciklama= :aciklama,userid=:userid WHERE id = :id");

$sorgumuz->bindValue(':ismi', $yeniisim, PDO::PARAM_STR);
$sorgumuz->bindValue(':aciklama', $yeniaciklama, PDO::PARAM_STR);
$sorgumuz->bindValue(':userid', 241, PDO::PARAM_INT);
$sorgumuz->bindValue(':id', 1, PDO::PARAM_INT);

$sorgumuz->execute();

$etkilenen_veri_sayisi = $sorgumuz->rowCount();

echo $etkilenen_veri_sayisi;

Bu alandaki veri güncelleme yöntemlerini aşağıda sırasıyla veriyorum:

2. Farklı yöntem:

$yeniisim = "yenidir daaa";
$yeniaciklama = "demi aciklamasi yeni buda..";

$sorgumuz = $dbpdo->prepare("update galeriler set ismi = :ismi ,aciklama= :aciklama,userid=:userid WHERE id = :id");

$sorgumuz->execute(array(':ismi' => $yeniisim, ':aciklama' => $yeniaciklama,':userid' => 542, ':id' => 1));

$etkilenen_veri_sayisi = $sorgumuz->rowCount();

echo $etkilenen_veri_sayisi;

3. Farklı yöntem:

$yeniisim = "Baska yenidir daaa";
$yeniaciklama = "baska demi aciklamasi yeni buda..";

$sorgumuz = $dbpdo->prepare("update galeriler set ismi = ? ,aciklama= ?,userid=? WHERE id = ?");

$sorgumuz->execute(array($yeniisim, $yeniaciklama,542, 1));

$etkilenen_veri_sayisi = $sorgumuz->rowCount();

echo $etkilenen_veri_sayisi;

4. Farklı yöntem: Standart değişkenleri sorgu içinde belirtmek, ancak kullanışlı değil, yukarıdaki yöntemlerden birini tercih etmenizi öneririm:

$yeniisim = "gggg yenidir daaa";
$yeniaciklama = "hhhh demi aciklamasi yeni buda..";

$sorgumuz = $dbpdo->prepare("update galeriler set ismi = '".$yeniisim."' ,aciklama= '".$yeniaciklama."', userid='645' WHERE id = '1'");

$sorgumuz->execute();

$etkilenen_veri_sayisi = $sorgumuz->rowCount();

echo $etkilenen_veri_sayisi;

PDO::PREPARE – Tablo silmek

Tablo silmek prepare ile çok kolay, ayrıca bu fonksiyonun ilk başlarda anlattığım özelliği ile aynı anda birden fazla farklı tabloyu silebiliyoruz. bunu yaparken sorguğu defalarca değiştirmemize gerek kalmıyor. Küçük bir mantık yürütmek gerekirse toplu olarak silmek istediğiniz yada sitenizde bu özelliği eklemek istediğiniz alana gelen veriyi sadece foreach alanında execute kullanarak kodlama kalabalığı yapmadan halledebiliriz. Ben küçük bir mantık yürüttüm, ihtiyaçlara göre hayal gücümüz dahada farklı yorumlar bulacaktır.

ÖRnek bir tablo silme kodu:

$sorgumuz = $dbpdo->prepare("delete from galeriler where id = :id");

$sorgumuz->bindValue(':id', 240 , PDO::PARAM_INT);

$sorgumuz->execute();

$etkilenen_veri_sayisi = $sorgumuz->rowCount();

echo $etkilenen_veri_sayisi;

id si 240 olan tablo tarih oldu şuanda… Kodlamada bir kaç ekleme yaparak aynı anda bir kaç tabloyu silebiliriz. sorgu cümlesini değiştirmeden:

$sorgumuz = $dbpdo->prepare("delete from galeriler where id = :id");

$sorgumuz->bindValue(':id', 240 , PDO::PARAM_INT);
$sorgumuz->execute();

$sorgumuz->bindValue(':id', 230 , PDO::PARAM_INT);
$sorgumuz->execute();

$sorgumuz->bindValue(':id', 220 , PDO::PARAM_INT);
$sorgumuz->execute();

$sorgumuz->bindValue(':id', 210 , PDO::PARAM_INT);
$sorgumuz->execute();

$etkilenen_veri_sayisi = $sorgumuz->rowCount(); //son sorgu icin bilgi verecektir, her execute den sonra eklerseniz o islem içinde bilgi verir..

echo $etkilenen_veri_sayisi;

Bir başka veri silme kodu. değişkenleri direk execute() parametresine ekleriz:

$sorgumuz = $dbpdo->prepare("delete from galeriler where id = :id");

$sorgumuz->execute(array(':id' => 239));

$etkilenen_veri_sayisi = $sorgumuz->rowCount();

echo $etkilenen_veri_sayisi;

Buda diğer bir basit veri silme kodumuz:

$sorgumuz = $dbpdo->prepare("delete from galeriler where id = ?");

$sorgumuz->execute(array(238));

$etkilenen_veri_sayisi = $sorgumuz->rowCount();

echo $etkilenen_veri_sayisi;

Sormak istediklerinizi yada önerilerinizi konu altından yorum atabilirsiniz. Bu konuda yeni dökumanları zaman içerisinde tekrar yazacağım. Türk geliştiricilerinin PDO sistemine geçmesini şiddetle öneriyorum. Gelecek herzaman yeni teknolojilere çabuk atapde olabilenlerin olacaktır.

Sağlıcakla kalın..

Kategoriler
Php ve mysql

PHP`ye Giriş

phpC/C++, Pascal, hatta Visual Basic bilen kişiler için PHP öğrenmek hemen hemen bir öğleden sonrayı ayırmak suretiyle yapılabilecek bir iştir. Bu dillere aşina olmayanlar ise belki bir kaç öğleden sonralarını ayırmak zorunda kalabilirler! PHP, bir Script dilidir; yani kodları düz yazı dosyaları halinde kaydedilir ve kullanılacağı ortamda bir yorumlayıcı tarafından yorumlanır. Bu, PHP ile yazacağınız programları, derlemek yani ortaya bir EXE veya çalıştırılabilir başka bir dosya çıkartmaya gerek olmadığı anlamına gelir. Fakat PHP Script`lerinizi çalıştırabilmek için bu dili bilen bir programa ihtiyacınız vardır. Bu programın tek başına (komut istemci penceresinde veya terminal ekranında) çalışması mümkün olduğu gibi, Web Server tarafından da çalıştırılabilir olması gerekir. Başka bir deyişle Web Sunucu programının PHP anlar hale getirilmesini sağlamak zorundayız.

PHP yorumcusu, bugün Zend-çekirdeği adı verilen bir Scripting teknolojine dayalı olarak, Zeev Suraski ile Andi Gutmans tarafından sıfırdan, tamamen yeniden yazılmış bulunuyor. Zend, tıpkı Windows Script Host ve mesela Visual Basic for Applications (VBA) gibi, işletim sistemine kendisi ile uyumlu Script dilleriyle yazılmış programları çalıştırma imkanı kazandıran bir teknolojidir (Zend konusunda ek bilgiyi Internet`te www.zend.com adresinde bulabilirsiniz.) Bugün bu dilin resmî adı “PHP: Hypertext Preprocessor” (Hiper-metin ön-işlemcisi) olarak değiştirildi, ve çeşitli Web Server`ların PHP dili anlaması için gerekli yorumlayıcıları yeniden üretlidi. 20 Ocak 200`de İsrail`de PHP`nin ilk uluslararası konferansı yapıldı ve 4`ncü sürümünün betası ortaya kondu.

Peki ama PHP nedir?

PHP ile artık oturup her türlü işlevselliği sahip programlar yazabilirsiniz; yani PHP başlı başına uygulama alanları bulabilecek düzeye ulaşmıştır. Başka bir deyişle PHP ile oyun programından tutun veritabanı yönetimine kadar hemen her türlü programı yazabilirsiniz. Bizi bu kitapçıkta ilgilendiren tarafıyla PHP, Web Sunucu`ya bir takım işler yaptırmak için program yazma dilidir. Tıpkı CGI/Perl veya ASP ya da ColdFusion, Java (Javascript değil!) gibi! PHP kodları, oluşturacağımız HTML sayfalarında HTML etiketlerinin arasında kendi özel ayracı içinde yazılır:

İster kişisel bilgisayarımızda, ister gerçek Internet ortamında olsun, bir Web Sunucu, ziyaretçinin (Internet istemci programının, Browser`ın) talep ettiği dosya adının uzatması olarak “.PHP,” “.PHP2,” “.PHP3,” veya “.PHP4” görünce, kendine kendine, “Yine bana iş çıktı!” diye düşünür! Çünkü Web Server, uzatması “.htm” veya “.html” olan bir dosyayı, kendi sabit disklerinden birinde bulur ve zahmetsizce, ziyaretçinin bilgisayarına gönderir. Fakat, “.asp,” .pl,” “.cfm” gibi, “.PHP” uzatması, Web Sunucu`ya bu sayfayı olduğu gibi, alıp ziyaretçinin Browser`ına göndermek yerine, önce PHP yorumlayıcıyı çağırarak, ona teslim etmesi gerektiğini bildirir. PHP yorumlayıcısı (yani Windows ortamında PHP.exe veya 4`ncü sürümle gelen PHP4isapi.dll, Unix ve türevlerinde çalıştırılabilir PHP dosyası), kendisine teslim edilen bu belgede önce “<?PHP” ve “?>” ayraçları arasındaki PHP kodlarını seçerek alır ve gereği ne ise onu yapar. Bu ayraçların içinde kalan kodlar, bizim yapılmasını istediğimiz işlemin komutlarıdır. HTML ile yetinmeyip, PHP kullanmamızın sebebi, bu komutların HTML`in yapayacağı şeyleri yapmasıdır.

HTML`in yapamayacağı şeylerin başında, Web Sunucusu`nda yapılacak işler vardır. Sözgelimi HTML etiketlerini kullanarak, Web Sunucusu`ndaki bir veritabanı dosyasını açıp, içindeki verileri okuyamayız. HTML yoluyla Web Sunucusu`nun sabit disklerindeki düz yazı dosyalarını da okuyamayız ve bu disklere dosya yazamayız. HTML etiketleri ile Web ziyaretçimizden bilgi edinebilir ve bunları Sunucu`ya yollayabiliriz; ama o kadar! Bu bilgileri işe yarar şekle sokmak için bize Server`da çalışan bir program gerekir. Server`da çalışan program, EXE ve DLL veya JSP (Java Server Pages) gibi bir “gerçek program”; veya Perl, ASP ve PHP gibi Script diliyle yazılmış bir program olabilir. (Gerçek programları yazanlar, tabiî, sizin Script diliyle yazılmış programlara “program” demenize çok kızarlar! Ama bu Script pogramlarının program olmasını hiç engellemez.)

Ne diyorduk? Web Sunucu, “.PHP” uzatmasını görünce telaşa kapılır, bu dosyayı PHP yorumlayıcısına verir ve o da “<?PHP” ve “?>” ayraçları içindeki kodları icra eder, demiştik. Bu icraatın sonunda ortaya çıkan ürün eğer ziyaretçiye gönderilecekse, HTML etiketleri içinde gönderilir; yani ziyaretçi asla PHP kodlarını göremez. Kimi zaman PHP programımızın çalışması sonucu ortaya ziyaretçiye gönderilecek bir ürün çıkmaz; elde edilen sonuç ya başka bir programa (örneğin elektronik ileti gönderen bir Sendmail progamına) hammadde olarak verilir, ya da Server`da sabit diske yazılır. Fakat her durumda, Web ziyaretçimiz bizim PHP kodlarımızı göremez; bu Web sayfalarımızda PHP kodu kullanmamız halinde, sayfalarımızın Browser tarafından tanınması veya tanınmaması gibi bir durumun ortaya çıkmaması demektir. Ziyaretçi ne tür Browser kullanırsa kullansın, kendisine Sunucu`dan daima saf HTML kodu geleceği için, sayfalarımızı rahatça görebilecektir. Tabiî bir nokta var: Sayfalarımızda herhangi bir Browser`ın arızalı yorumladığı veya hiç yorumlayamadığı HTML etiketleri bulunabilir; ya da söz gelimi ziyaretçiye giden HTML`in içinde Browser`da çalıştırılacak olan başka Script kodları bulunabilir; ve Browser bu kodları anlamayabilir. Örneğin, HTML sayfanızda VBScript kodları kullanmış iseniz, Netscape ile sitenize bağlanmış olan kişiler bu kodun oluşturmasını istediğiniz etkiyi göremeyeceklerdir; çünkü Netscape VBScript anlamaz! PHP ile yazacağınız Web programlarının (eski deyimiyle “sayfaların”) oluşturacağı HTML belgesinin Browser türleri ve sürümleri ile uyarlılığını sağlamak yine Web programcısı olarak sizin sorumluluğunuzdadır.

Özetlersek, PHP bir CGI programlama dilidir; bu dille, Web Sunucusu ile Web ziyaretçisi arasındaki buluşma noktası olan CGI`da bilgi alışverişi yapılabilir; Sunucu`da bulunan başka programlar çalıştırılabilir ve böylece Web sayfalarımıza HTML`in sınırlamalarının ötesinde hareket ve ziyaretçi ile etkileşme olanağı kazandırılabilir.

Sanırım iyi bir Web programcısı olarak şu anda ekrana “Merhaba Dünya!” yazdırmak için sabırsızlanıyorsunuz. Ama bunun için, PHP sayfanızı ya PHP-uyumlu bir Web Sunucusu`ndaki Web sitenize yüklemek, ya da kişisel bilgisayarınızdaki kişişel Web Sunucusu`na PHP öğretmek zorundasınız. Bu ikinci yöntemi kuvvetle tavsiye ederim; çünkü yazacağınız PHP programlarını gerçek Internet Sunucusunda sınamak, bazen arzu edilmeyen durumlara yol açabilir. Oysa kişinin bu denemeleri, evinde ve işyerinde kendi bilgisayarında yapması, çoğu zaman daha az başağrısı ve gözyaşına yol açar! En azından, PHP hatalarınızı ve gözyaşlarınızı sizden başka gören olmaz!