PHP ile SQL Insert sorgusu oluşturma fonksiyonu


PHP ile veritabanı uygulamaları geliştirirken, sürekli SQL sorguları yazıyoruz. Bunlardan birisi de veritabanına yeni kayıt eklemek için kullandığımız INSERT deyimi.

Bu sorguları tekrar tekrar yazmak bazen sıkıcı olabiliyor. Tırnakların açılıp kapatılması vesaire, bu gereksiz yükten kurtulmak için yazdığım fonksiyonu kullanıyorum. Projelerimde tablo adlarını dizi olarak belirtip, aldığım değişkenleri gerekli süzgeçlerden geçirip daha sonra bu fonksiyon ile sorgumu oluşturuyor ve veritabanı sunucusuna gönderiyorum. Güncelleme ve silme işlemleri için de yazmış olduğum fonksiyonlar var, bunların hepsini bir arada kullanınca tadından yenmiyor. Ama şimdi sadece ekleme sorgusu oluşturan fonksiyonunu verip aynı zamanda mantığını anlatmak istiyorum.

Fonksiyon

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function vtEkle($degerler,$alanlar=null,$tabloAdi) {

// boş değerleri null olarak ayarla
foreach($degerler as $key => $value) {
if(empty($value)) $degerler[$key]='NULL';
}

// alanlar girildiyse yazdır girilmediyse boş bırak
$alanlar    =   ($alanlar) ?  '(`'.implode('`, `',$alanlar).'`)' : '';
$sorgu='INSERT INTO `'.$tabloAdi.'`'.$alanlar.' VALUES(\''.implode('\',\'',$degerler).'\')';

// null değerlerin tırnakları kaldır
$sorgu=str_replace("'NULL'","NULL",$sorgu);

// oluşturulan sorguyu string olarak dönder.
return $sorgu;
}


vtEkle ismini verdiğim fonksiyon 3 değer alıyor, bunlar sırasıyla şöyle:

  1. Değerler
  2. Alanlar
  3. Tablo adı

$degerler, sorguda values içerisine eklenecek, ve gönderilecek olan verileri dizi halinde tutuyor.

$alanlar, bu argüman istenirse boş bırakılabilir. Boş bırakıldığında sql sorgusu tablo alanlarını belirtmeden tüm alanlar için veri gönderilecek şekilde oluşturulur.

$tabloAdi ise veri eklenecek olan tablonun adı.

kodların içerisinde yorum satırları ile açıklama yaptım ama akışını belirtmek gerekirse fonksiyon şu işlemleri gerçekleştiriyor;

  • Boş olarak gönderilen değerler SQL dilindeki boş anlamına gelen NULL ifadesine çevriliyor
  • Aldığı ikinci argüman olan alanlar değişkeni, eğer boş ise içeriği boş olarak atanıyor. Ama doluysa gerekli karakterleri ekleyor ve tablomuzdaki alanların hazır halini string bir şekilde $alanlar değişkenine aktarıyor
  • $sorgu değişkenini ise sabit karakterleri ekleyip, geriye kalan değişkenleri kalıbına uygun olarak düzenliyor ve sql cümlesini hazır hale getiriyoruz
  • son olarak boş gönderilen değerleri null ifadesine çevirdik ama değerler eklenirken hepsine tek tırnak eklendiği için sorgu gönderilmek istenirse null yerine tırnak içerisinde ‘null’  ifadesi gidecek bu da string bir ifade olduğu için hata mesajı alacağız. Bu nedenle str_replace fonksiyonu ile null olarak geçen ifadelerin tırnaklarını kaldırıyoruz
  • Sorgumuzu string bir ifade olarak dönderiyoruz.

Kullanımı:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$alanlar    =   Array(
    'uyeAdi',
    'uyeSifre',
    'uyePosta' ,
    'uyeAdres'
);
$degerler   =   Array(
    'Ali',
    '123456',
    'ali@cin.com',
    ''
);

echo vtEkle($degerler, null, 'uyeler').PHP_EOL;
echo vtEkle($degerler, $alanlar, 'uyeler');

Çıktı:

1
2
INSERT INTO `uyeler` VALUES('Ali','123456','ali@cin.com',NULL)
INSERT INTO `uyeler`(`uyeAdi`, `uyeSifre`, `uyePosta`, `uyeAdres`) VALUES('Ali','123456','ali@cin.com',NULL)

İki kullanımı da, çıktısı da gördüğünüz gibi. Tabii bu fonksiyon herhangi bir güvenlik kontrolü yapmıyor. Geçireceğiniz değerlerin gerekli kontrollerini yapmalısınız.

İstenirse fonksiyon içerisinde sorgu işlemi de yaptırılıp true veya false olarak işlemin sonucu döndürülebilir, çıktısını örnek kullanımda görebilir dilerseniz kendi değerlerinizi girip fonksiyonu deneyebilirsiiz.

Haydin Rastgele 😉

Facebook Yorumları

1 Yorum

  1. 🙂 Hoca Eline sağlık nasıl bir koddur bu her seferinde yazmaktan bıkmıştım ::) işleyişide güzel
     
    insert into yerine update set yapıncada update yapar 🙂 delete ye gerek yok ztn 🙂
    eline sağlık
    yaptığım sitlerde seni anarak kullanırım 🙂
    require(egonomik.php)

Uyarı: Yorumlarda link kullanmayınız. Link içeren yorumlar otomatik olarak spam kabul edilmektedir.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir