PHP'de MySQL kullanımı ve temel işlemler

Dikkat: Bu yazının yazılma tarihinin üzerinden en az 60 gün geçmiş. İçerisindeki bilgiler güncelliğini yitirmiş olabilir. Yorumları ve güncellemeleri göz önünde bulundurarak yazıyı takip ediniz.

Giriş

MySQL, sql tabanlı bir dil olduğundan yönetimi tamamen kendine özgü cümlecikler ile olur. Bu cümlecikler o kadar esnektir ki aynen konuşma dilinde emirler vermek gibidir. Sadece bazı kurallara sahiptir. Bu dökümanda mysql'de bu yapılabilecek ana işlemler hakkındaki sql cümleleri oluşturmayı, php ile mysql'i nasıl kullanacağımızı, bağlantı sağlayacağımızı ve temel işlemler için gerekli sql cümle yapılarını göreceğiz.

MySQL sunucusu ile bağlantı sağlamak.

Her protokolde olduğu gibi mysql'de de öncelikle bir bağlantı sağlayıp bu iletişim protokolü üzerinden işlemler yapacağız. MySQL'i komut satırından kullananlar bilir ki, mysql client'da sifremizi girdikten sonra ilk iş olarak bir tablo seçer ve sonrasında da yazdığımız güçlü sql sorgulara bakarız. Temel olarak bağlanıp bir veritabanı seçmemiz gerekiyor sorgularımızı işletmek için. PHP'yi mysql destekli derlemişseniz mysql extension'ı yüklenmiş demektir. Eğer yüklü ise mysql fonksiyonlarını işletebiliriz. MySQL fonksiyonları hakkında daha ayrıntılı bilgiyi php dökümantasyonundan alabilirsiniz.

MySQL'e bağlanabilmek için 3 kritere sahip olmamız gerekir. Birincisi bağlanacağımız host'dur. Üzerinde çalıştığımız bilgisayar olduğundna dolayı genellikle localhosttur. İkinci parametre kullanıcı, son parametre de bu kullanıcının şifresidir. İster php'den ister başka bir client'dan bağlanmaya çalışın; ancak bu bilgiler doğrultusunda bir mysql bağlantısı edinebilirsiniz. PHP'de bağlantı işlemini mysql_connect() fonksiyonu yapıyor. Bu fonksyiona sırasıyla host, k.adi, şifre parametrelerini belirtmemiz gerekiyor. Örnek bir bağlantı sayfası :
// ayarlar
$host      = "localhost";
$kullanici = "root";
$sifre     = "";

// baglanti
$baglanti = mysql_connect( $host, $kullanici, $sifre ) or die("HATA : " . mysql_error());
Görüldüğü gibi önce bağnatı ayarlarımızı yaptık, ardından bu değişkenleri kullanarak $baglanti adlı değişkene bir mysql bağlantısı atadık. or die kalıbı her komutta kullanabileceğimiz bir kalıptır. or die'dan önceki fonksiyonda işletim hatası olursa die()'da belirttiğimiz ifade ekrana basılır ve script çalışması durdurulur. mysql_error() fonksiyonu ise bir önceki mysql işleminde oluşan hatayı verir.
Şimdi bu bağlantıyı kullanarak bir veritabanı seçeceğiz. Çünkü sorguları çalıştırabilmek için öncelikle bir bağlantı sağlamış ve bir veritabanı üzerinde bulunuyor olmamız gerek.
Veritabanı seçimini de mysql_select_db() fonksiyonu ile yapacağız.
// veritabani secimi
mysql_select_db( 'veritabanim', $baglanti ) or die("HATA : " . mysql_error());
Böylece "veritabanim" adlı veritabanını seçtik. Artık sorgularımızı bu veritabanı üzerinde işletebiliriz.
Sorguları işletmek için ise mysql_query() foksiyonunu kullanacağız. Bu fonksiyon tek parametre ile çalışıyor. Daha önce yapılmış bağlantıyı ve seçilmiş veritabanını kullanıyor. Bu tek parametre de işleteceğimiz sql sorgusunu içeren stringdir.
Şimdi temel mysql işlemlerinde kullandığımız sql sorgularını görelim..

Temel mysql işlemleri nelerdir?

MySQL'de temel (ve genel) olarak yaptığımız işlemler bir tabloya veri eklemek, bu verileri çekmek, güncellemek ve silmektir. Bu işlemler için ayrı ayrı sql yapıları kullanacağız. Bazı işler daha sistem kurulurken kullanılır. Mesela bir veritabanı yaratmak, ya da yeni tablo oluşturmak.. Bu işlemleri sistemlerde her zaman yapılan işler arasına alamayız.. Onun için bu işlemleri bilgisayarınızda sistemi geliştirirken yaparız. Bunları phpMyAdmin programı (http://www.phpmyadmin.net) ile yapmanızı öneririm. Basit bir arabirimi ve Türkçe desteği var. phpMyAdmin ile başlangıç işlerini hatta rutin işleri yapacak olan sorguları da yazarken/geliştirirken bile kullanabilirsiniz.
Aşağıda bazı anlatımlar göreceksiniz, bu anlatımları tablo adlı bir tablo üzerinde yapacağım. Basitçe tabloda; kullanici, kayit_tarihi, eposta ve ziyaret_sayisi alanları var olsun. Birlikte çalışmak için şu sql'i çalıştırıp siz de deneme tablosu oluşturabilirsiniz :
CREATE TABLE `tablo` (
`kullanici` VARCHAR( 20 ) ,
`kayit_tarihi` DATETIME,
`eposta` VARCHAR( 255 ) ,
`ziyaret_sayisi` INT( 12 )
);
Şimdi rutin işleri yapan sorgularımızı geliştirip, nasıl işleneceğini görelim.

Veri eklemek

Veri eklemek için kullanacağımız sql cümlesi yapısı şöyledir :
INSERT INTO `tablo` ( `kullanici` , `kayit_tarihi` , `eposta` , `ziyaret_sayisi` )
VALUES ('fatih', NOW( ) , '[email protected]', '0');
Yapı olarak, önce INSERT INTO 'tablo adı' ile başlar burada hangi tabloya veri ekleme işlemi yapılacağı belirtilir. Bu kısımdan sonra parantez içerisinde hangi sıra ile veri alanları için verilerin belirtilmesi gerekiyorsa o sırada alanlar yazılması gerekiyor. Boş bırakılması durumunda geçerli sırada veri girilecektir. Bu kısımdan sonra VALUE kalıbı ve tekrar parantez içerisinde az önce belirtilmiş sırada gerekli veri türlerine göre verilerin belirtilmesi gerekir.
Bizim sorgumuzda veriler, meta'ları değerlere eşleyerek göstemek gerekirse;
kullanici      = 'fatih'
kayit_tarihi   = < verinin eklendiği andaki tarih >
eposta         = '[email protected]'
ziyaret_sayisi = 0
şeklinde ekleniyor.

Sorguda görüldüğü gibi o andaki zamanı belirtmek için NOW() şeklindeki mysql fonksiyonunu kullandım. MySQL o kadar esnek bir sorgulama dilidir ki, üzerinde çok fazla kalıp, çok fazla tenkin ve çok fazla fonksiyon vardır. Bu fonksiyonlar hakkındaki bilgiyi mysql'in kendi dökümantasyonunda veya mysqlfreaks'da bulabilirsiniz.

Veri silmek

SQL sorguları genelde bazı kalıplardan oluşur. Belirli bir sorguyu filtrelemek için WHERE kalıbını kullanırız. Aynı if gibidir. Belirli bir sorgudan etkilenecek olan kayıtlardan bazılarını seçeriz. Mesela silmek için kullandığımız sorguda ilk başta tüm tablo etkilenir; ama biz belirli kayıtları/kayıdı silebilmek için o kayıt hakkında bazı referanslar verip tüm tabloyu o veri çıkana kadar filtrelemiş oluruz. AND kalıbı ekleyerek birden fazla koşulda filtreleme yapılabilir. Tablomuzda birden fazla aynı kullanıcı adına sahip veri olmayacağı için kullanıcı adlı alan bizim için iyi bir referans olabilir.
Silmek için DELETE FROM 'tablo adı' kalıbını kulalnırız. Bu kullanımda tüm tablo etkilenir ve tablo boşaltılmış olur. WHERE kalıbını sorgumuza ekleyerek bir veya daha fazla belirli kayıdı sileceğiz. Örnek olarak az önce eklediğimiz kayıdı silelim..
DELETE FROM `tablo` WHERE kullanici = 'fatih'
Bu sorgu ile tek satır (fatih kullanıcısına ait) silinmiş olacaktır.

Veri güncellemek

Veri güncellemek de silmek gibidir. Yani süzgeçlenerek kayıtlar ifade edilir. Süzgeçlenmediği takdirde tüm tablo etkilenecektir. SQL yapısı UPDATE 'tablo adı' SET şeklindedir. Az önceki verinin silinmemiş olduğunu varsayarak güncelleyelim.
UPDATE `tablo` SET ziyaret_sayisi = ziyaret_sayisi+1 WHERE kullanici = 'fatih'
Bu sorguda fatih kullanıcısının ziyaret_sayisi değerini 1 artırmış oluyoruz. MySQL'de alan adlarını böyle kullanabiliriz, bunun için önce değeri tablodan çekip sonra php ile artırıp buraya girmeye gerek yoktur. MySQL'de bu tarz operatörlerde mevcuttur. Ayrıca güncelleyeceğimiz alan tek olmayabilir, böyle durumlarda aralarına virgül koyarak belirtebiliriz.

Veri çekmek ve veri listelemek oldukça ayrıntılı ve uzun olduğu için bu yapıyı ayrı dökümanda ele alacağım!


Hazırlayan : Mehmet Fatih YILDIZ

Yorumlar

Üye Resmi Kürşad Özdemir
6 Temmuz Pazartesi ´09 00:52
Güzel ve anlaşılır birşekilde açıklamışsınız teşekkürler..
31 Mart Çarşamba ´10 22:23
merhaba hocam .iki tablom var profil ve ozgecmis.kisi uye formundan uye olup bilgileri profil tablosuna kaydedilecek sonra giris yapacak ve profil sayfasında bilgilerini gorebilecek.ordan sonra isterse bide ozgecmis olusturabilecek.ozgecmis formundan bilgiler ozgecmis tablosuna kaydedilecek.sonra profil sayfasına geldiginde hem uye bilgilerini hem ozgecmis bilgilerini gorebilecek.mysqlde tablo yapım soyle ozetini veriyorum kolay olsun diye:
CREATE TABLE profil (
  pid int(10) NOT NULL auto_increment,
  cvid int(10) NOT NULL,
  isim varchar(100) NOT NULL,
  PRIMARY KEY  (pid),
FOREIGN KEY (cvid) REFERENCES cv(cid)
) ENGINE=MyISAM  ;

CREATE TABLE ozgecmis (
  cid int(11) NOT NULL auto_increment,
  cvisim varchar(255) default NULL,
  
  PRIMARY KEY  (cid)
 
) ENGINE=MyISAM ; tablolar bu sekilde ama php ile bir turlu veri girmeyi basaramadım.profil tablosunda uyeye verilen id nasıl ozgecmis tablosunada yazılır ve o id ile yaptıgı tum islemler gerekli tablolara kaydedilir.veri gosterme konusuna girmeyiniz lutfen sadece veri girme hakkında bilgi verirseniz yeterli tesekkurler
Üye Resmi cahit007
6 Mayıs Cuma ´11 19:47
herşey güzel hoşda ama benim istediğim burda yazmıyor galiba. benim aradığım örneğin; create table okul(ad varchar(15),soyad varchar(15),hesapno int);
ben tabloda hesapno yu değiştirmek veya kaldırmak istiyorum. bunun için güncellemem mi gerekiyor. gerekiyorsa nasıl yapacam. yardımcı olursanız sevinirimmmm.
Üye Resmi ozan
21 Ocak Pazartesi ´13 12:03
hocam ben tum sql komutlarını  bılıorum ve php ile de baglanti icin komutları bılıorum .Sorum su.Ben simdi bu yazılanları seyde  
mysql 5.5 command line da yazıordum.sadece sql 'a ait komutları.simdi php ile bunun arasındaki baglantiyi kuran bu komutları note pad' e yazarken (mysql_connect mysql_fetch_array,mysql_db,mysql_query)
yazdıktan sonra orneğın kaydederken bunları .php olarak mı kaydedıcem normal php'yi kullandıım gıbı
yoksa .sql olarak mı bu sayfayı kaydedıcem...
Üye Resmi fevzi
20 Ekim Pazar ´13 02:40
veri silme ve eklemeyi formlar aracılığı ile gösterseniz bence daha faydalı olur. bu yönde döküman az internette...
Üye Resmi kartal
18 Aralık Çarşamba ´13 17:36
Access denied for user ''@'localhost' to database

Sql'e bağlana biliyorum ama veri tabanı seçerken böyle bir şey diyor ne yapmam gerek ?
Üye Resmi Serdar Kurt
13 Ocak Pazartesi ´14 05:20
Sql'e giriş yaptığın kullanıcının bağlanmak istediğin database'de yetkisi olmayabilir ya da database adı yanlış olabilir yetki ayarlarına göz atar mısın?
Yeni Yorum *
İletişim Bilgileri
*
*
E-Posta adresiniz gösterilmeyecektir.
(unut)
Güvenlik Kodu *

Gönderiliyor