vehbiakdogan

Senior Sofware Developer

PDO

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

Php ile Tekil-çoğul Ziyaretçi sayacı

Merhaba arkadaşlar bu yazımda sizlere PDO kullanarak bir ziyaretçi sayacı yapmayı göstereceğim

Öncelikle bir sayac adında veri tabanı açalım ve aşağıdaki sql sorgusunu çalıştıralım.

 CREATE TABLE IF NOT EXISTS `hit` (  
`gun` int(11) NOT NULL,
`ay` int(11) NOT NULL,
`yil` int(11) NOT NULL,
`simdi` int(11) NOT NULL,
`sayac` int(11) NOT NULL,
`ip` varchar(100) NOT NULL,
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

Ardından Bir php dosyası açalım ve kodlarımızı yazmaya başlayalım.
Herzamanki gibi kodların içine gerekli açıklamayı yazdım anlamadığınız yerleri sorabilirsiniz.

 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
<style type="text/css">
.sayac{
background:#ccc repeat;
border:1px dashed #555;
border-radius:10px;
color:#000;
width:300px;
margin:0px auto;
}
p{
border-bottom: 3px solid #fff;
}
</style>
<?php
function vehbiakdoganSayac()
{
$host='mysql.hostinger.web.tr'; // mysql host
$user='u622378237_admin'; // kullanıcı adı
$pass=''; // şifresi
$vt='u622378237_admin'; // veri tabanı adı
try {
$db = new PDO('mysql:host='.$host.';dbname='.$vt, $user, $pass);
} catch (PDOException $v) {
echo 'Bağlantı Başarısız: ' . $v->getMessage();
}
// Veri tabanı bağlantımızı yaptık
$bugun=date("d"); // bugünün tarihi
$ay=date("m"); // bu ay
$yil=date("Y"); // bu yıl
$onlineSuresi=time()-2*60*60; // iki dakika aktif olmazsa onlineden düşecek
$ip=$_SERVER['REMOTE_ADDR']; // ziyaretçinin ip si
$bugunGiris=$db->query("SELECT * FROM hit WHERE ip='$ip' AND gun='$bugun'")->rowCount(); // bugün o ip ile girilmişmi
if($bugunGiris!=0){ // yani bugün girilmişse
$al=$db->query("SELECT * FROM `hit` WHERE `ip`='".$ip."' AND `gun`='".$bugun."'")->fetch();
$guncelle=$db->query("UPDATE `hit` SET `sayac`='".($al['sayac']+1)."' WHERE id='".$al['id']."'"); // çoğulu 1 artırdık
}else{ // griş yapılmamışsa kaydettirelim
$db->query("INSERT INTO `hit` SET `gun`='$bugun', `ay`='$ay', `yil`='$yil', simdi='".time()."', sayac='1',ip='$ip'");
}
// evet sıra geldi online, tekil ve çoğulu Göstermeye
// online Kişi
$online=$db->query("SELECT * FROM hit WHERE simdi>='$onlineSuresi'")->rowCount(); // onlnie kişilerimiz
// çoğul hitler
$bugunx=$db->query("SELECT SUM(sayac) FROM hit WHERE gun='$bugun' AND ay='$ay' AND yil='$yil' ORDER BY id desc")->fetch();
$bugun_cogul=$bugunx['SUM(sayac)']; // bugün çoğul
$dunx=$db->query("SELECT SUM(sayac) FROM hit WHERE gun='".($bugun-1)."' AND ay='$ay' AND yil='$yil' ORDER BY id desc")->fetch();
$dun_cogul=$dunx['SUM(sayac)']; // dün Çoğul
$ayx=$db->query("SELECT SUM(sayac) FROM hit WHERE ay='$ay' AND yil='$yil' ORDER BY id desc")->fetch();
$buay_cogul=$ayx['SUM(sayac)']; // bu ay çoğul
$toplamx=$db->query("SELECT SUM(sayac) FROM hit ORDER BY id desc")->fetch();
$toplam_cogul=$toplamx['SUM(sayac)']; // toplam çoğulumuz
// tekil hitler
$bugun_tekil=$db->query("SELECT * FROM hit WHERE gun='$bugun' AND ay='$ay' AND yil='$yil'")->rowCount(); // bugün tekil
$dun_tekil=$db->query("SELECT * FROM hit WHERE gun='".($bugun-1)."' AND ay='$ay' AND yil='$yil'")->rowCount(); // dün tekil
$buay_tekil=$db->query("SELECT * FROM hit WHERE ay='$ay' AND yil='$yil'")->rowCount(); // dün tekil
$toplam_tekil=$db->query("SELECT * FROM hit")->rowCount(); // dün tekil
echo"<div class='sayac'>
<p>Online: $online </p>
<p>Bugün Tekil: $bugun_tekil</p>
<p>Bugün Çoğul: $bugun_cogul</p>
<p>Dün Tekil: $dun_tekil</p>
<p>Dün Çoğul: $dun_cogul</p>
<p>Buay Tekil: $buay_tekil</p>
<p>Buay Çoğul: $buay_cogul</p>
<p>Toplam Tekil: $toplam_tekil</p>
<p>Toplam Çoğul: $toplam_cogul</p>
</div>";
}
vehbiakdoganSayac();
?>

Evet arkadaşlar ben sayfamızı ziyaretci-sayaci.php diye kaydettim . ziyaretci-sayaci.php sayfamızı çalıştırınca ekrana hit bilgileri gelecektir. uygulamanın indirme linkine Buradan Ulaşabilirsiniz.

PDOPHP

Php stripslashes() ve addslashes() Fonksiyonları


Evet Arkadaşlar Sizlere Bu makalemde Benim çok işime yarayan stripslashes() ve addslashes() Fonksiyonlarından bahsedeceğim 🙂
Öncelikle Fonksiyonların Ne işe yaradıklarını anlatayım :

stripslashes() Fonksiyonu

stripslashes() Fonksiyonumuz bir string veritipini parametre olarak alıyor ve içindeki tüm tersbölü () işaretlerini silme işlemini yapıyor örnek verecek olursak :

<?
$string = 'Vehbi akdoğan';
echo stripslashes($string); // Ekranda Vehbi akdoğan Yazacak
?>

Evet arkadaşlar Örneğimizi Çalıştırırsanız Daha kolay Anlarsınız 🙂

addslashes() Fonksiyonu

addslashes() Fonksiyonumuz ise gene string vir veritipini parametre olarak alıyor ve stringimizdeki tüm tırnak işaretlerinin (‘) Yanına (‘) tersbölü işareti ekliyor örnek verirsek :

<?
$string = 'Vehbi'akdoğan';
echo addslashes($string); // Ekranda Vehbi'akdoğan Yazacak
?>

Şeklinde olacaktır.

Fonksiyonların Kullanım Alanları

Evet gelelim bu fonksiyonların kullanım alanlarına
Arkadaşlar Nerde Nasıl kullanlır Hiç araştırmadım ama Ben 1 yerde kullandım ve çok işime yaradı sizlerede ordan bahsedeyim :
Veri tabanında PDO ile kodlama yaparken (mysqlde de aynımı bilmiyorum) tek tırnak(‘) ve ters bölü() işaretlerini Veritabanına kaydettiremiyordum araştırdım ve tek tırnak ve ters bölünün mysql da açığa sebep oldukları için PDO da kaydedilmediğini gördüm daha sonra nasıl yapayım derken addslashes() Fonksiyonuyla Karşılaştım Ve Verimi veritabanına kaydettirirken addslashes() fonksiyonunu kullandım verinin kaydedildiğini gördüm 🙂 Başka nerede nasıl kullanılırlar hiç araştırmadım artık onlarıda siz araştırırsınız 🙂

Birdahaki Makalemde Görüşmek Üzere …

PDOPHP

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