vehbiakdogan

Senior Sofware Developer

SQL – MySQL

SQL Foreign Key Kullanımı

Sql foreign key ilişkisel veri tabanında bir tabloda belirlediğimiz bir event olması durumunda diğer tabloda işlem yapılmasını sağlayan bir yapıdır. bir nevi triggere benziyor.

Örneğin bizim urunler ve urun_resim diye iki adet tablomuz olsun birinci tabloda ürünlerimizi ikinci tabloda ürüne ait görselleri tutalım.

Biz eğer foreign key kullanmazsak üründe silme işlemi yapıldığı zaman ürün resimleri ya veri tabanında çöp olarak kalacak ki bu saçma olur yada ek kod yazıp urun_resim tablosundan da bu görselleri silmemiz gerekecek işte foreign key tam bu noktada devreye giriyor.

Eğer biz foreign key kullanırsak diyoruzki urunler tablomdan bir ürün silindiğinde sende o ürünün id sine ait ürün resimlerini otomatik sil diyoruz.

örneğin:

ALTER TABLE `urun_resim`
ADD CONSTRAINT `foreign_key_adi` FOREIGN KEY (`urun_id`) REFERENCES `urunler` (`urun_id`) ON DELETE CASCADE;

Yukarıdaki kodda urun_resim tablosuna foreign_key_adi adında bir trigger oluştruduk ve dedikki urunler tablosunda bir (DELETE) silme işlemi gerçekleştiğinde urun_id sini al ve urun_resim tablosundaki urun_resim.urun_id sütununda urunler.urun_id eşleşenleri sil dedik.

 

Yani biz urun_resim tablosuna bir foreign key oluşturduysak bir ürünü resimleriyle beraber silmek için aşağıdaki sql kodunu çalıştırmamız yeterli olacaktır.

DELETE FROM urunler WHERE urun_id='1'
-- urun_id si 1 olan ürünleri sil, urun_resim tablosunda urun_id si 1 olan resimleri sil

PDOPHPSQL - MySQL

PDO Ders2 – Veri tabanına Bağlanmak Ve veritabanında İşlem yapmak

Diğer Dersimizde PDO Nedir açıklamıştık Pdo Nedir Bilmeyen Arkadaşlarımız PDO Ders1 – PHP Data Objects (PDO) Nedir Adlı Makalemizi İnceleyebilirler.

PDO ile Veritabanına Bağlanmak

<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
?>

Evet Arkadaşlar $dbh = new PDO ile yeni bir veritabanı bağlantısı oluşturduk Şimdi Veritabanında Oluşacak Bağlantı Hatalarımızı Kontrol Edelim

<?php
try {
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
?>

Evet Arkadaşlar Burdada getMessage Bize Veritabanımızın Bağlantısında Hata Varsa onları Gösteriyor Böylece Bağlantımızın Yapılıp yapılmadığını görebiliyoruz.

PDO ile Açılan Bağlantıyı kapatma

<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
// burada bağlantıyı kullanıyoruz


// İşimiz bittiğine göre bağlantıyı kapatabiliriz.
$dbh = null;
?>

Yukarıda Gördüğünüz Gibi Arkadaşlar İşlemlerimizi Yaptıktan Sonra $dbh değişkenimize null değeri vererek bağlantımızı sonlandırabiliriz

PDO ile Yeni bir kayıt eklemek

Yeni bir kayıt eklemek için exec metodunu kullanacağız. Sonrasında eğer eklediğimiz satırın ID’sini almak istiyorsak lastInsertId metodunu çağıracağız. Eklerken bir sorun gerçekleşirse exec metodu false dönecektir. Bu nedenle öncelikle eklenip eklenmediği kontrol edip sonrasında ID’yi ekrana yazdırabiliriz.

if($db->exec('INSERT INTO users (name) VALUES ("blogger")'))
{
    $id = $db->lastInsertId();
    echo 'Yeni eklenen üyenin IDsi: ' . $id;
}
else
{
    echo 'Yeni kayıt eklerken bir hata meydana geldi.';
}

PDO ile sorgu göndermek

Eğer yapacağımız sorgudan bir sonuç almayı beklemiyorsak “exec“, bir sonuç isteniyorsa “query” metodlarını kullanmalıyız. Özetle; “DELETE/UPDATE/INSERT” gibi sorgularımız için “exec”, “SELECT” gibi sorgularımız için “query”.

try {
    $db = new PDO('mysql:host=localhost;dbname=test', $user, $password);
    $db->exec('SET NAMES `UTF-8`');
    $count = $db->exec('DELETE FROM messages WHERE old = 1');
    echo $count . ' messages deleted';
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

PDO ile Sorguları Geri Alabilme

BeginTransaction metodunu çalıştırdıktan sonra yazacağımız tüm ekleme, düzenleme ve silme sorguları normal kullandığımız şekilde çalışmaya devam eder. Eğer sorgular devam ederken tüm bu aralıktaki sorguları geri almak istersek rollBack metodunu çağırırız. Bu metodu çalıştırdığımızda beginTransaction’dan rollBack metoduna kadar yazdığımız tüm ekleme, düzenleme ve silme sorguları geri alınır.

// İşlemleri başlattığımızı ifade ediyoruz
$db->beginTransaction();
 
$db->exec('INSERT INTO users (name) VALUES ("Ahmet")');
$db->exec('UPDATE users SET name = "Ali"');
$db->exec('DELETE FROM users WHERE name = "Hasan"');
 
// Yaptığımız sorguları geri aldık
$db->rollBack();

Değişkenleri sorgulara dahil etmek

önce prepare metodu ile sorgumuzu hazırlayıp dışarıdan değerler vereceğimiz yerlere “?” (soru işareti) yerleştiriyoruz. Sonrasında hazırladığımızı sorguya execute metodu ile soru işareti olan yerlere gelecek değerlerimizi gönderiyoruz.

/ Sorgumuzu hazırlıyoruz
$query = $db->prepare('INSERT INTO users (name, email) VALUES(?, ?)');
 
// Sorguda belirttiğimiz yerlere gelecek değerleri veriyoruz
$query->execute(array('blogger', 'email@email.com));

PDO kullanırken tüm dışarıdan aldığımız değişkenleri sorgularımıza bu yöntem ile dahil etmemiz uygulamamızın güvenliği ve düzeni açısından çok önemlidir. Bu yöntem sayesinde SQL injection açıklarından da arınmış oluyoruz.

PDO ile verileri listelemek

Verileri Listelerken query methodunu kullanırız

foreach($db->query('SELECT * FROM users') as $row) {
    echo $row['name'] . '<br/>';
}

PDO ile bir satır veri çekmek

Bunun için PDO srgumuzdan Sonra fetch methodumuzu çağırırız

$row = $db->query('SELECT * FROM users WHERE id = 1')->fetch();
echo $row['name'];

Kaynak : www.phpr.org/php-data-objects-pdo/#more-1940

PDOSQL - MySQL

PDO Ders1 – PHP Data Objects (PDO) Nedir

Artık “mysql_connect”, “mysql_query” fonksiyonlarının müfredattan kalkma zamanı geliyor, P H P’de kendi resmi dökümantasyonunda da bunun sinyalini vermeye başlamış; “mysql” fonksiyonlarının sayfasında aşağıdaki gibi bir öneriyle karşılaşıyoruz;

“This extension is not recommended for writing new code. Instead, either the mysqli or PDO_MySQL extension should be used. See also the MySQL API Overview for further help while choosing a MySQL API.”
Özetle artık bunları kullanmanızı önermiyoruz, PDO ya da MySQLi’ye geçin diyor. Peki nedir bunlar? adresindeki karşılaştırmaya baktığımızda MySQLi ile PDO arasında çok fark olmadığını görebilirsiniz.
PDO’da çoğu veritabanı sürücüsü kullanılmasına olanak sağlayan, MySQLi ise sadece MySQL destekleyen ve PDO’ya göre biraz daha karmaşık ve kapsamlı bir arayüz diyebiliriz. Sonuç olarak ikisi de öneriliyor. Ben burada PDO’dan bahsetmeye çalışacağım, iksinden birisinin kullanım şeklini kavradığınızda diğerini de rahatlıkla kullana bileceğinize inanıyorum.

PDO nedir?

PDO(PHP Data Objects / PHP Veri Objeleri) özetle; hafif ve tutarlı bir şekilde veritabanına erişimi sağlayan bir arayüz. Adından da anlayacağınız üzerie “Object Oriented Programming” arayüzüne sahip, onlarca veritabanı sürücüsü destekliyor;

  • 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

İleride daha farklı bir veritabanı sürücüsüne geçmek istediğinizde sisteminizi temelli olarak değiştirmek yerine PDO ile kaldığınız yerden bir takım ufak modifikasyonlar ile bu işi gerçekleştirebilirsiniz.
Bunların haricinde PDO 5.1‘den itibaren geliyor, yani çalışabilmesi için güncel versiyonlara ihtiyacınız olacak.

Kaynak : www.phpr.org/php-data-objects-pdo/#more-1940

Arkadaşlar Bende Sizlere Mysql Yerine PDO yu Anlatacağım

PDOSQL - MySQL

Php Ders 9 Php İle Veri Tabanında Bazı İşlemler

Bu Dersimizin Sonunda Veri Tabanıyla İşlem Yapmayı Az Çok Öğrenmiş Olacaksınız
bir Önceki Dersimiz Php Ders 8 Php İle Veri Tabanına Bağlanma Yı Okursanız Bu Dersimizi Daha İyi Anlarsınız

 

Php İle Veri Tabanında İşlemler Yapmak

Arkadaşlar Bu Dersimizi Örnek Üzerinde Anlatırsam Daha İyi Olacağını Düşünüyorum
İlk Dersimizde Sizlere wamp Server i Kurmayı anlatmıştım bilmeyenler İçin Php Giriş Ve Wamp Server Kurulumu Başlıklı Konumuza Bakabilirsiniz.
Şimdi Tarayıcımızda localhost/phpmyadmin Adresine Giriyoruz Ve Yeni Bir Veri Tabanı Oluşturuyoruz
Direk Hostta işlem Yapan Arkadaşlarımızda Panellerinden Yeni Bir Veri Tabanı Oluşturabilirler

Veri Tabanı Adına uyeler Yazıyoruz Ve Veri Tabanı Oluşturuyoruz
Oluşturduğumuz Veri Tabanına Girince Hiç Tablo Yok Diyor Ve Biz Şimdi Bir tablo oluşturacağız
Öncelikle Bizim Üyemizin Hangi Bilgileri Saklanacak Onlara Karar Vermeliyiz
1- Adı
2- Soyadı
3- Dogum Tarihi
4- Yaşadığı ŞEhir
5- Cinsiyet
6- Uye İd si
Şimdi 6 Alanlı Bir Tablo oluşturuyoruz
Evet Arkadaşlar Ben Veri Taanını oluşturdum Aşağıdaki SQL kodunu phpmyadminde Okutursanız Sizdede Uyeler adında Bir Tablo oluşacaktır
SQL KODU :

CREATE TABLE IF NOT EXISTS `uyeler` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `adi` text CHARACTER SET utf8 COLLATE utf8_turkish_ci NOT NULL,
  `soyadi` text CHARACTER SET utf8 COLLATE utf8_turkish_ci NOT NULL,
  `dogum_tarihi` text NOT NULL,
  `sehir` text NOT NULL,
  `cinsiyet` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

Evet Arkadaşlar Elimizde uyeler Adında Bir Tablomuz var Ve tablomuzun 6 adet Sütunu Var
Şimdi İşlemlerimize Geçelim
Öncelikle index.php Adında Bir Sayfa Oluşturalım Ve içine Öncelikle mysql Bağlantımızı Yapalım


<?php
$kullaniciadi="root"; // Sizde Kullanıcı Adınızı Yazın
$sifre= ""; // Mysql Şifrenizi Yazın
$host="localhost"; // Mysql Hostunuzu Yazın 
$veritabani="uyeler"; // Veritabanımızın Adı 
 
// Veri Tabanına Bağlan 
$baglan=mysql_connect($host,$kullaniciadi,$sifre);

//VERİTABANI SEÇME

mysql_select_db($veritabani,$baglan); // Veritabanımızı Seçtik 

?>

Evet Arkadaşlar mysl bağlantımızı Yaptık Ve uyeler Adlı Veri Tabanımızı Seçtik
Şimdi İlk olarak Veri Ekleme İle Başlayalım
1 Adet Üye Ekleyelim

<?php
$kullaniciadi="root"; // Sizde Kullanıcı Adınızı Yazın
$sifre= ""; // Mysql Şifrenizi Yazın
$host="localhost"; // Mysql Hostunuzu Yazın 
$veritabani="uyeler"; // Veritabanımızın Adı 
 
// Veri Tabanına Bağlan 
$baglan=mysql_connect($host,$kullaniciadi,$sifre);

//VERİTABANI SEÇME

mysql_select_db($veritabani,$baglan); // Veritabanımızı Seçtik 


//VERİLER
$isim = "Vehbi";
$soyisim = "AKDOGAN";
$dogum_tarihi = "01.01.1995";
$sehir = "ERZURUM";
$cinsiyet = "E";

 

//YENİ KAYIT GİRME
$sql="insert into uyeler (id, adi, soyadi, dogum_tarihi, sehir, cinsiyet) values ('', '$isim','$soyisim','$dogum_tarihi','$sehir','$cinsiyet')";
mysql_query("$sql");
?>

Evet Arkadaşlar Öncelikle isim Soyisim Gibi Değerleri tanımladık ardından Veri tabanımıza ekledik Php ile veritabanına Veri eklemek için
insert into tablo Adı ( Veritabanındaki Sütunlar ) values(Sütunların Sayfamızdaki Değerleri );
Şeklinde Yazarız
Evet Şimdide Oluşturduğumuz Kaydı Ekrana Yazdıralım


<?php
$kullaniciadi="root"; // Sizde Kullanıcı Adınızı Yazın
$sifre= ""; // Mysql Şifrenizi Yazın
$host="localhost"; // Mysql Hostunuzu Yazın 
$veritabani="uyeler"; // Veritabanımızın Adı 
 
// Veri Tabanına Bağlan 
$baglan=mysql_connect($host,$kullaniciadi,$sifre);

//VERİTABANI SEÇME

mysql_select_db($veritabani,$baglan); // Veritabanımızı Seçtik 


//KAYITALRI EKRANA YAZMA
$sql="select * from uyeler";
$sorgu=mysql_query("$sql");
while ($sonuc=mysql_fetch_array($sorgu)){
echo "id = $sonuc[0]
<br>İsim = $sonuc[1]
<br>Soyisim = $sonuc[2]
<br>Dogum Tarihi = $sonuc[3]
<br>Sehir = $sonuc[4]
<br>Cinsiyet = $sonuc[5]
";}
?>

Evet Arkadaşlar Kayıtlarımızı Ekrana Yazdırırken mysl_fetch_array fonksiyonundan Yararlanırız Bu Fonksiyon Veritabanındaki Bilgileri Bir Diziye Atar
mysql_select* from tablo_adi bu Fonksionumuz İse Tablomuzu Seçer

Şimdide Kayıt Güncelleyelim


<?php
$kullaniciadi="root"; // Sizde Kullanıcı Adınızı Yazın
$sifre= ""; // Mysql Şifrenizi Yazın
$host="localhost"; // Mysql Hostunuzu Yazın 
$veritabani="uyeler"; // Veritabanımızın Adı 
 
// Veri Tabanına Bağlan 
$baglan=mysql_connect($host,$kullaniciadi,$sifre);

//VERİTABANI SEÇME

mysql_select_db($veritabani,$baglan); // Veritabanımızı Seçtik 


//KAYIT GÜNCELLEME
$sql="update uyeler set adi='ahmet', soyadi='xxx' where adi='Vehbi' ";
mysql_query("$sql");
?>

Veri Tabanımızda Güncelleme Yapamak İçin Kullandığımız Fonksiyon “update tablo Adı set Düzenlenecek kısım=’Yeni Değeri’ where Duzenlenecek Kısım “; Burda kafanızı Belki where karıştırabilir arkadaşlar kısaca Bahsetmek Gerekirse where türkçe karşılığıda Nereye anlamına Geliyor bildiğiniz gibi
Bizede Burada Diyor ki Ben Veritabanında nereyi Güncelleyeyim Bizde Diyoruz Ki adi Vehbi Olan Kısmı Düzelt
Bu örneğimizde 1 tane veri olduğu için Ada Göre Güncellettik ama Çok üyesi olan sistemlerde id ye göre Düzenleme Yapılır
Evet Arkadaşlar Son olarakta Bilgi Silmeyi Görüp Dersimizi Sonlandıracağız


<?php
$kullaniciadi="root"; // Sizde Kullanıcı Adınızı Yazın
$sifre= ""; // Mysql Şifrenizi Yazın
$host="localhost"; // Mysql Hostunuzu Yazın 
$veritabani="uyeler"; // Veritabanımızın Adı 
 
// Veri Tabanına Bağlan 
$baglan=mysql_connect($host,$kullaniciadi,$sifre);

//VERİTABANI SEÇME

mysql_select_db($veritabani,$baglan); // Veritabanımızı Seçtik 


//KAYIT SİLME
$sql="delete from uyeler where id='1'";
mysql_query("$sql");

//BAĞLANTIYI KESME
mysql_close($baglan);
?>

mysql de bir Veriyi Silmek için “delete from Tablo Adı where = ‘silinecek Yer'”
Burda da Dedikki Bizim id si 1 olan ÜYemizi Sil Ve php myadminden Bakarsanız Silindiğini Göreceksiniz mysql_close() Bu Fonksiyonda Veri Tabanı Bağlantımızı Kapatmamızı Sağlar Veri Tabanını Kapatmassak Sistemimizde Büyük Bir Güvenlik Açığı oluşabilir

ÖNEMLİ Açtığımız Tüm Tagları Kapattığımız Gibi Açtığımız Tüm mysql Bağlantılarınıda Kapatmayı Unutmayalım !!
Birdahaki Dersimizde Görüşmek Üzere …

PHPSQL - MySQL

Php Ders 8 Php İle Veri Tabanına Bağlanma

Bu dersimizde Php İle Veritabanına Bağlanmayı Göreceğiz
Bir Önceki Dersimiz olan Php Ders7 Hazır Fonksiyonlara Bakmanızı Tavsiye Ederiz

 

Veri Tabanı Nedir

Arkadaşlar Veritabanı Sitemizdeki Bilgilerimizi Düzenli Olarak Saklamamızı İstediğimiz Zaman İstediğimiz Şartlara Göre Bu bilgilere Ulaşmamızı Sağlar örneğin Sitemizdeki Üye Bilgilerini Veritabanında Saklayabiliriz
Veri Tabanını Bir Tablodur , Veritabanındada Satırlar Ve Sütunlar Vardır

mysql Nedir

Mysql Bir Veritabanı Dilidir Arkadaşlar Bu Dile De ayrıca Değineceğiz
Şimdilik mysql Kodlarını Verip php De nasıl Kullanacağımıza Bakacağız

Php İle Veri Tabanına Bağlanmak

 

<?php
$kullaniciadi="root"; // Veritabanı Kullanıcı Adımız
$sifre= "dbSifre"; // Veritabanı Şifremiz
$host="localhost"; // mysql Hostumuzun Adı
// Veri Tabanı Bilgilerimiz Yukarıda Şimdi 
$baglan=mysql_connect($host,$kullaniciadi,$sifre); // Veri Tabanı Bağlantımızı Yapan Kodumuz
if($baglan) // Bağlantı oldumu Diye Kontrol Ediyoruz
echo"Veri Tabanına Bağlanıldı";
else
echo"Bağlantı Başarısız";
?>

Kodlarımızı Zaten Açıkladık
mysql_connect($host,$kullaniciadi,$sifre) Bu Kodumuz Bize Mysql Bağlantısı Yapar.
BU Dersimizi Kısa Anlatıyorum Ama Bu Dersimizi İyi Bilmeniz Gerekir Gittikçe mysql kodlarımız Karışacak Çünkü Ama Karışacak Diyorum Diye Gözünüz Korkmasın Oldukça Basit Kodlar
Birdahaki Dersimizde Görüşmek Üere …

PHPSQL - MySQL