lostyazilim
tr.link

PDO Kullanımını Kolaylaştıralım

13 Mesajlar 1.949 Okunma
acebozum
tr.link

ikodev ikodev Developer Kullanıcı
  • Üyelik 08.05.2015
  • Yaş/Cinsiyet 28 / E
  • Meslek Developer
  • Konum Samsun
  • Ad Soyad İ** Ş**
  • Mesajlar 1020
  • Beğeniler 321 / 321
  • Ticaret 19, (%100)
Merhaba arkadaşlar,

Bu aralar önceden yapmış olduğum projeleri github platformunda paylaştığım için farkettim ki önceden yazmış olduğum fonksiyonları bu güzel forumda paylaşmak istedim. Fonksiyonları özetçe anlatmak gerekirse, PDO sisteminde veri ekleme-çekme-güncelleme vesayre gibi işlemleri satır satır yazmaktansa tek satırda fonksiyonu çağırarak bu işlemi kolaylaşlaştırıyoruz.

Haydi fonksiyonlara geçelim ;

Öncelikle PDO bağlantısı ;
header('Content-Type: text/html; charset=utf-8');

$k_id = "username"; // veritabanı kullanıcı adı - database username
$k_pass = "password"; // veritabanı kullanıcı şifresi - database password
$k_host = "localhost"; // sunucu - host
$k_db = "database"; // veritabanı adı - database name

try {
$db = new PDO("mysql:host={$k_host};dbname={$k_db};charset=utf8", $k_id, $k_pass);
// veritabanından veri çekerken türkçe sorunlarını düzeltmek için utf-8e dönüştürüyoruz
$db->exec("SET NAMES 'utf8';");
$db->exec("SET CHARSET 'utf8;'");
} catch ( PDOException $e ){
// die($e->getMessage()); // bağlantı sağlanamıyorsa bu satırı aktif ederek sorunu öğreniyoruz
die("DATABASE NOT FOUND!"); // veya hata çıktımızı veriyoruz
}


PDO ile Veri Çekme (Tek)
function veriCek($tablo, $alanlar, $sutun, $id)
{
global $db;

$veri = $db->query("SELECT {$alanlar} FROM {$tablo} WHERE {$sutun} = '{$id}'")->fetch(PDO::FETCH_ASSOC);
return $veri;
}

// Fonksiyonu kullanımı

$tekbirkullanici = veriCek("users", "*", "id", "1");

// Burada dedik ki, "users" tablosunda ki "id" sutununda değerini "1" olan veriyi çek.
// Bu verininde "*" diyerek tüm bilgilerine ulaşmak olduk. "*" yerine "sütunadı" yazarsanız sadece bu değeri/sütunda ki veriyi çekecektir.


PDO ile Tablo Çekme (Toplu)
function tabloCek($tablo, $alanlar, $manuel)
{
global $db;

$veri = $db->query("SELECT {$alanlar} FROM {$tablo} {$manuel}", PDO::FETCH_ASSOC);
return $veri;
}

// Fonksiyon kullanımı

$kullanicilar = tabloCek("users", "*", "ORDER BY id DESC");

// Burada dedik ki, "users" tablosunda ki tüm verileri çek. "ORDER BY id DESC" diyerekte manuel komut girdik.
// Yani "id" değerine göre tersten bir sıralama yapacaktır.
// Aynı şekilde "*" dediğimiz bölüm ise tüm sütunların değerini çekmek için


PDO ile Veri Silme
function veriSil($tablo, $sutun, $id)
{
global $db;

$query = $db->prepare("DELETE FROM {$tablo} WHERE {$sutun} = :edc");
$delete = $query->execute(array(
'edc' => $id
));
}

// Fonksiyon Kullanımı

$kullaniciyiSil = veriSil("users", "id", "1");

// Burada dedik ki, "users" tablosunda "id" değeri "1" olanı sil.
// Sadece bu kadar..


PDO ile Veri Ekleme
function veriEkle($sutunlar, $veriler, $tablo)
{
global $db;

$other = array();
$sorgu = "";
$count = count($veriler);
$a = 0;
for($i = 0; $i < $count; $i++)
{
$a++;
if($a == $count)
$sorgu .= $sutunlar[$i]." = ?";
else
$sorgu .= $sutunlar[$i]." = ?,";
}

$query = $db->prepare("INSERT INTO {$tablo} SET {$sorgu}");
$insert = $query->execute($veriler);

if ( $insert )
return true;
else
return false;
}

// Fonksiyon Kullanımı

2 Yolu vardır (Benim en tercih ettiğim)

$sutunlar = array("kullaniciadi", "password");
$cevaplar = array("edcsmile", "şifre123");

$kullaniciEkle = veriEkle($sutunlar, $cevaplar, "users");

Veya

$kullaniciEkle = veriEkle(array("kullaniciadi", "password"), array("edcsmile", "şifre123"), "users");

// Burada dedik ki, "$sutunlar" olarak belirttiğimiz dizi veritabanında ki sütunların isimleri
// "$cevaplar" olarak belirttiğimiz dizi de sırasıyla dizilere elemanları yerleştirdik.
// Ve fonksiyonu çağırıp belirlediğimiz tabloya bu veriyi ekledik.


PDO ile Veri Güncelleme
function veriGuncelle($sutunlar, $veriler, $tablo, $hedef, $no)
{
global $db;

$other = array();
$sorgu = "";
$a = 0;
$count = count($veriler);
for($i = 0; $i < $count; $i++)
{
$a++;
if($a == $count)
$sorgu .= $sutunlar[$i]." = :a_".$sutunlar[$i];
else
$sorgu .= $sutunlar[$i]." = :a_".$sutunlar[$i].",";
}

$b = 0;
foreach( $sutunlar as $sutun )
{
$other["a_".$sutun] = $veriler[$b];
$b++;
}

$other["no"] = $no;

$query = $db->prepare("UPDATE {$tablo} SET {$sorgu} WHERE {$hedef} = :no");
$update = $query->execute($other);

if ( $update )
return true;
else
return false;
}

// Fonksiyon kullanımı

$sutunlar = array("username", "password");
$cevaplar = array("edcsmile2", "123şifre");

// buranın açıklaması ;
// username (sütun) > edcsmile2 (değer)
// password (sütun) > 123şifre (değer)

$kullaniciGuncelle = veriGuncelle($sutunlar, $cevaplar, "users", "id", "1");

// Users tablosunda ki "id" sutunundan değeri "1" olana oluşturduğumuz dizide ki verileri hedeflerine göre güncelledik.
// Veri ekleme fonksiyonuyla aynı şekilde tek farkı, ek olarak hedef ve hedefin değerini belirledik.
// etkilenekcek sütunlar
// sütunlara değerler
// tablo, hedef, değer
// işlem sadece bu kadar..


Şimdilik bu kadar.. :rolleyes: Umarım yeni arkadaşlar ve PDO sistemine geçmeyi düşünen kişiler için faydalı olur..

İyi forumlar, iyi kodlamalar :rolleyes:
bitirimci SefaCanDemir s60v3

kişi bu mesajı beğendi.

elektronikssl
webimgo

SefaCanDemir SefaCanDemir Front-End Developer Kullanıcı
  • Üyelik 10.11.2013
  • Yaş/Cinsiyet 27 / E
  • Meslek Front-End Developer
  • Konum Adana
  • Ad Soyad S** D**
  • Mesajlar 1345
  • Beğeniler 234 / 472
  • Ticaret 12, (%100)
Çok temiz olmuş. .NET dillerin deki gibi kolaylık sağlıyor bu şekilde. .NET dillerini pek hoş karşılamasam da böyle bir kolaylığı söz konusu.

Ayrıca tek bir fonksiyon da tek bir değişken oluşturup;


$degisken = fonksiyon("TÜM SORGU CÜMLESİ");


şeklinde de bir çalışmada yapılabilir. Çünkü bazı sorgular farklı yapılarda kurulabiliyor :)
 

 

sefacandemir.com.tr

ikodev ikodev Developer Kullanıcı
  • Üyelik 08.05.2015
  • Yaş/Cinsiyet 28 / E
  • Meslek Developer
  • Konum Samsun
  • Ad Soyad İ** Ş**
  • Mesajlar 1020
  • Beğeniler 321 / 321
  • Ticaret 19, (%100)
SefaCanDemir

Tabi bunlarıda paylaşalım ;
// tablo için bu

function tabloCMD($sorgu)
{
global $db;

$veri = $db->query($sorgu, PDO::FETCH_ASSOC);
return $veri;
}

// tekil için bu

function veriCMD($sorgu)
{
global $db;

$veri = $db->query($sorgu)->fetch(PDO::FETCH_ASSOC);
return $veri;
}

// genel

function cmd($sorgu)
{
global $db;

$veri = $db->query($sorgu);
return $veri;
}


Kullanımda bahsettiğiniz gibi,

$sorgu = cmd("TÜM SORGU CÜMLESİ");
SefaCanDemir

kişi bu mesajı beğendi.

mrscode mrscode Üyeliği Durdurulmuş Banlı Kullanıcı
  • Üyelik 01.11.2017
  • Yaş/Cinsiyet 32 / K
  • Meslek UI Designer
  • Konum Bursa
  • Ad Soyad S** Ö**
  • Mesajlar 80
  • Beğeniler 37 / 34
  • Ticaret 0, (%0)
Ellerine sağlık sevgili hemşerim :) Uzun zamandır bu tarzda bir şey arıyordum teşekkürler!
ikodev

kişi bu mesajı beğendi.

wmaraci
wmaraci

ikodev ikodev Developer Kullanıcı
  • Üyelik 08.05.2015
  • Yaş/Cinsiyet 28 / E
  • Meslek Developer
  • Konum Samsun
  • Ad Soyad İ** Ş**
  • Mesajlar 1020
  • Beğeniler 321 / 321
  • Ticaret 19, (%100)
mrscode ,

Faydalı olduysa ne mutlu :)
mrscode

kişi bu mesajı beğendi.

Korkmaz Korkmaz cagdaskorkmaz Kullanıcı
  • Üyelik 03.12.2014
  • Yaş/Cinsiyet 28 / E
  • Meslek SARUHAN HOLDING - Fakir Elektr
  • Konum İstanbul Avrupa
  • Ad Soyad Ç** K**
  • Mesajlar 3536
  • Beğeniler 253 / 1236
  • Ticaret 8, (%100)
Teşekkürler işime yaradı.

Arşive aldım: https://makerturkiye.net/pdo-veritabani-sinifi/
ikodev

kişi bu mesajı beğendi.

cagdaskorkmaz.com.tr

teknoburgers teknoburgers Üyeliği Durdurulmuş Banlı Kullanıcı
  • Üyelik 22.11.2017
  • Yaş/Cinsiyet 27 / E
  • Meslek Öğrenci
  • Konum İstanbul Anadolu
  • Ad Soyad A** Ç**
  • Mesajlar 1013
  • Beğeniler 651 / 259
  • Ticaret 0, (%0)
Sayende PDO öğrenmeyeceğim... Bunları bir class haline getirip tüm dosyalara includelamak yeterli olur herhalde.
 

 

ikodev ikodev Developer Kullanıcı
  • Üyelik 08.05.2015
  • Yaş/Cinsiyet 28 / E
  • Meslek Developer
  • Konum Samsun
  • Ad Soyad İ** Ş**
  • Mesajlar 1020
  • Beğeniler 321 / 321
  • Ticaret 19, (%100)
teknoburgers

Neden hakaret etmişsiniz gibime geldi? :) "Sayende PDO öğrenmeyeceğim" bir garip oldum bu kısımda.. Evet bunların hepsini class haline getirip include işlemiyle heryerde rahatlıkla kullanabilirsiniz
teknoburgers

kişi bu mesajı beğendi.

teknoburgers teknoburgers Üyeliği Durdurulmuş Banlı Kullanıcı
  • Üyelik 22.11.2017
  • Yaş/Cinsiyet 27 / E
  • Meslek Öğrenci
  • Konum İstanbul Anadolu
  • Ad Soyad A** Ç**
  • Mesajlar 1013
  • Beğeniler 651 / 259
  • Ticaret 0, (%0)

edcsmile adlı üyeden alıntı

teknoburgers

Neden hakaret etmişsiniz gibime geldi? :) "Sayende PDO öğrenmeyeceğim" bir garip oldum bu kısımda.. Evet bunların hepsini class haline getirip include işlemiyle heryerde rahatlıkla kullanabilirsiniz


İhtiyacım kalmadı kısacası :D
 

 

teknoburgers teknoburgers Üyeliği Durdurulmuş Banlı Kullanıcı
  • Üyelik 22.11.2017
  • Yaş/Cinsiyet 27 / E
  • Meslek Öğrenci
  • Konum İstanbul Anadolu
  • Ad Soyad A** Ç**
  • Mesajlar 1013
  • Beğeniler 651 / 259
  • Ticaret 0, (%0)
......
 

 

wmaraci
wmaraci
Konuyu toplam 1 kişi okuyor. (0 kullanıcı ve 1 misafir)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al