Aramayan Bulamaz
×
sorgu çalıştırma arama sorgusuna ait içerikleri görüntülemektesiniz.
PHP Data Object - PDO

PHP de veri tabanına bağlanma ve sorgu çalıştırmayı anlatmıştım.
Klasik veri tabanı bağlantısı mysql_connect() komutu ile yapılıyor, sorgu çalıştırma mysql_query() ile yapılıyor fakat pdo yapısı biraz farklı. PDO php 5.2 den sonra gelen bir veri tabanı sorgu sınıfı, yani nesne tabanlı bir yapı.
En güzel özelliği çoklu veri tabanı desteği olması. Oracle, SQL Server, MySQL gibi farklı veritabanlarına bağlanabilme özelliği sunuyor. Ayrıca kendi içerisinde sql injection koruması olan bir sınıftır.

$db = new PDO('mysql:host=localhost;dbname=veritabanı adı', 'kullanıcı adı', 'sifre'); PDO sınıfını db değişkenine bağlı olarak oluşturduk, sorgularımızı bu sınıfa bağlı methodlar ile yapacağız.

query() methodu genel olarak tüm sorgularda kullanılır.
exec() methodu bilgi girişi, güncelleme, silme gibi veri tabanına değer göndermede kullanılır.
prepare() methodu query() methodundaki gibi tüm sorguları çalıştırmada kullanılır fakat buna ek olarak bir de execute() methodu kullanılır, prepare ile yapılan sorgunun uygulanması için.
fetch() methodu; tek bir sonuç getirmek için kullanılır, query ile çalıştırılmışsa sorgu query den sonra, prepare ile çalıştırılmışsa sorgu execute methodundan sonra kullanılır.

Veritabanından dataların sayılarını getirmek istediğimizde fetch(PDO::FETCH_NUM) kullanılır.

Örnek olarak bir sorgu çalıştırayım, sorguyu query ile yapacağım. $sorgu = $db->query('select * from blog where id=1')->fetch(); Veritabanından id değeri 1 olan konuyu getiren sorguyu yazdık. Bu şekilde de yapabilirdik $sorgu = $db->query('select * from blog where id=1'); $sorgu->fetch(); İkisi de aynı işlemi yapıyor. echo $sorgu['blog_baslik'];
İ

C# Veritabanında Sorgu Çalıştırma

C# ta veritabanında sorgu çalıştırabilmemiz için SqlCommand komutunu kullanırız, ben örneğimize MySql üzerinden devam edeceğim için MySqlCommand komutunu kullanacağım.
Yeni bir windows form uygulaması başlatıp, iki buton bir de listview ekliyoruz. Butonun birine "Bilgileri Getir" diğerini "Bilgiyi Sil" isimlerini veriyoruz.İlk önce veritabanı bağlantımızı yapmak için bağlantı komutlarımızı yapıp bağlantıyı açıyoruz. MySqlConnection baglanti = new MySqlConnection("server=localhost; userid=root; password=root; database=cryptograph"); Bilgileri Getir ismini verdiğimiz butonun click olayına hata kontrol komutlarımızı kullanarak bağlantımızı açıyoruz ve veriler çekmek için gerekli komutlarımızı yazıyoruz.
try { baglanti.Open(); MySqlCommand sorgu = new MySqlCommand("SELECT * FROM blog ORDER BY id DESC", baglanti); MySqlDataReader oku = sorgu.ExecuteReader(); while (oku.Read()) { listView1.Items.Add(oku["blog_baslik"].ToString()); } } catch (Exception hata) { MessageBox.Show(hata.ToString(), "Hata"); } finally { baglanti.Close(); }
MysqlCommand komutu ile sorgu isminde bir nesne tanımladık ve sql sorgumuzu belirtip hangi bağlantıyı kullanacağını belirttik.SELECT * FROM blog ORDER BY id DESC sql sorgumuz, burada blog isimli tablodan verilerin id alanına gire tersten sıralanacak şekilde getirilmesini istedik.MysqlDataReader ile bir data reader nesnesi oluşturduk, yani veritabanından bilgileri okuyacak olan nesne, oku isimli nesneye sorgu.ExecuteReader(); bu komut ile bilgiyi nereden okuyacağını belirttik, sorgu isimli nesneden alacak bilgiyi.Daha sonra bunu döngüye sokarak listview içine ekledik veriyi. Try içerisinde gerçekleşen sorgular bittiğinde finally içerisindeki sorgu çalıştırılır, yani durum gerçekleşse de gerçekleşmese de en sonda yapılacak işlem burada belirtiliyor,

Veri Tabanında Tablo İlişkilendirerek Bilgi Çekme (Inner Join)

Veri tabanından bilgi çekmek için SELECT komutunu kullanırız. SELECT * FROM tablo_ismi şeklinde bir komut ile tablo_ismi isimli tablodan bilgimizi çekeriz, eğer bir şarta bağlı olarak çekeceksek WHERE ile şartımızı belirtiriz.

SELECT * FROM blog WHERE id=1 blog isimli tabloda id değeri 1 olan bilgiyi getirir ekrana. Id değeri bir olan konunun bir de kategori bilgisi var kategoriler tablosunda, ayrıca konuyu açan kişinin de bilgisi profil tablosunda hepsi için ayrı ayrı sorgu çalıştırmaktansa tek bir sql sorgusu ile hepsini getirebiliriz.

 Kategori tablosunda k_id ve kat_isim adında alanlar var, kategori ismi ve id bilgisini tutan alanlar.

Profil tablosunda p_id, kullanici_adi adında alanlar var i, kullanıcı adı ve kullanıcının id bilgisini tutan  alanlar.

Blog tablosunda id, blog_baslik, blog_icerik, kat_id, kullanici_id adında alanlar var, konunun id bilgisi, içerik ve başlık bilgisi, konuyu açan kullanıcının id bilgisi ve hangi kategoride bulunuyorsa onun id bilgisini tutan alanlar.

Tek sorguda bunları getirebilmek için şu komutu kullanıyoruz;

SELECT * FROM blog b INNER JOIN profil p ON b.kullanici_id = p.p_id INNER JOIN blog_kategori bk ON b.kat_id=bk.k_id INNER JOIN sosyal s ON p.p_id=s.kullanici_id WHERE b.id=1

Blog isimli tabloyu seçtik ve bu tablo ismini b isimli bir değişkene atadık, sonra bunun aynısını diğer tablolar içinde yaptık. 

b.kat_id=bk.k_id ile blog isimli tablodaki kat_id alanıyla blog_kategori isimli tablodaki k_id alanını birleştirmiş olduk blog tablosunda tutulan kategori id si ne ise kategoriler tablosundaki o id ye sahip olan kategorinin bilgileri gelecek, aynı şey profil tablosu içinde geçerli, b.kullanici_id=p.p_id blog tablosundaki kullanıcı id bilgisi ile profil tablosundaki id bilgisi birbirine bağlanarak bilgi çekilmiş. Bu şekil bir kullanım yapmasaydık eğer her biri için ayrı ayrı sorg

PHP - MySQL Veritabanına Bağlanmak ve Bilgi Okumak (Resimli Anlatım)

Bağlanacağımız veritabanı : ornek_veritabani

Veritabanımızı ve isim_listesi isimli tablomuzu oluşturduk

 

id isimli kolonun tipini int olarak belirledik, yani tam sayı tipinde ve primary index tanımladık, bu da birincil anahtar anlamına geliyor.

Nedir bu birincil anahtar?

Hepimizin kimliğinde yazan TC numarası gibi benzeri olmayan bir değerdir, tabloya kaydedilen her değere bir numara ataması yapacak ve her numara birbirinden farklı olacak, yani her bilginin kendine ait bir kimlik numarası olacak, atuo increment i işaretlememizin sebebi ise her eklenilen bilgiye otomatik olarak bir değer girmesi için, yoksa kimlik numarası tanımlanmayacaktı.

Şimdi bu veritabanına nasıl bağlanacağız?

Bunun için bir veritabanı kullanıcı lazım, bizim kullanıcımız: ornek_kullanici

Bağlanmak için gerekli komutumuz

mysql_connect("sunucu adresi","kullanıcı adı","şifre" );

mysql_connect("localhost","ornek_kullanici","12345" );

bu komut ile bağlanıyoruz, ama böyle bir kullanım pek güvenli değildir, bir if sorgusu ile yapmak daha iyidir

bağlantı komutumuzu bir değişkene atayıp o değişkeni if ile kontrol ettireceğiz,

$baglanti = mysql_connect("localhost","ornek_kullanici","12345" );
if (!$baglanti)
{
die('Veritabani baglantisi kurulamadi: ' . mysql_error());
}

burada "eğer bağlantı kurulamazsa php scriptini çalıştırmayı durdur ve ekrana hata mesajını yazdır" diyor

Örnek bir kullanım:

çalıştırdığımızda sayfa boş görünür çünkü sayfada bir içerik yok, bağlantı şifresini yada kullanıcı adını değiştirip tekrar bakalım sayfaya

gördüğünüz gibi hata

  • Önceki Sayfa
  • Sonraki Sayfa