gklp blog

yoğunmuş…

Php’de tüm tablolar için ortak insert function

with 5 comments

Merhaba arkadaşlar bugünlerde bir kod kafama çok takıldı, oluşturduğum her tabloya bilgi girişi yapacağım ve bunları her tablom için ayrı ayrı insert komutu yazacağıma güzel bir function yazıp, bu functiona da sadece table ismini ve verilerimi dizi şeklinde gönderip insert ettirmek çok mantıklı geldi.

İlk olarak colonlarımı çekmeliydim sonra ise verilerimi alıp, bildiğimiz insert syntax ına dönüştürüp, query olarak işlemeliydi.

http://tr.php.net bu konuda çok yardımcı oldu ve şöyle bir kod yazdım…

Bu kod içinde bilmemiz gerekn bir kaç yapı var ilk önce onlardan bahsedeyim.

array_map() : Bu function bize dizimizi, geri döndük bir function içinde işletmemizi sağlıyor nasıl mı ?

$a = array(1, 2, 3, 4, 5);
$b = array_map(”cube”, $a);

Burdaki cube ifadesi bir function şöyleki :

function cube($sayi)
{
return $sayi*$sayi*$sayi
}

array_map ilk önce bu dizi elemanlarımızı, functiona gönderiyor dönen sonucu aynen geri dizideki yerine yazıyor.

OUT: $b = (1,8,27,64,125 );

Bunu nerede kullanacağız derseniz,” mysql_escape_string ” function için.

İkinci olarak bilmemiz gereken:

array_combine : Bunu buradaki yazıdan öğrenebilirsiniz, Buradaki yazımda

Evet gerekli olan functionlarımızı öğrendik geriye PHP yeteneğimiz kaldı.

Benim database sınıfım içinden alınmış bir fonksiyon, yapmanız gereken tek şey fonksiyona, table adını ve değerlerinizi göndermeniz burada önemli olan diğer bir noktada gelen veri dizi ile ben mysql’deki colonları combine ettim yani gönderdiğiniz, veri sırasını colon sırası ile aynı yapmalısınız.


public function insert_data($table,$value = array()){
   try{
     $qColumnNames = $this->query(" SHOW COLUMNS FROM $table ") or die("gok");
      $numColumns = $this->database_num_rows($qColumnNames) or die("gok");
        $x = 0;
          while ($x < $numColumns)
          {
           $colname = mysql_fetch_row($qColumnNames) or die("gok");
           $col[$x] = $colname[0];
           $x++;
          }
           $value = array_combine($col, $value);
          $sql =  sprintf('INSERT INTO %s (%s) VALUES ("%s")', $table,
                implode(', ', array_map('mysql_escape_string', array_keys($value))),
                  implode('", "',array_map('mysql_escape_string', $value)));

            echo $sql;
        }
      catch (exception $e){
      die("{$e->getMessage()}");
    }
 }

//OUT: INSERT INTO haber (id, title) VALUES ("1", "gokalp")

İşi biraz daha abartacağım sanırım aynı anda farklı tablolara insert çektirmek gibi güzel bir function olucak hızı nasıl etkiler tahmin edemiyorum test etmek gerek :)

Bunlarda paylaşabilirsin...
  • Print this article!
  • MySpace
  • Twitter
  • Technorati
  • MyShare
  • Ping.fm
  • Reddit
  • RSS
  • Socialogs
  • del.icio.us
  • Facebook
  • Faves
  • Google Bookmarks
  • HackerNews

5 Responses to 'Php’de tüm tablolar için ortak insert function'

Subscribe to comments with RSS or TrackBack to 'Php’de tüm tablolar için ortak insert function'.

  1. kanka yine dellenmişssin sanırım :D

    Olumsuz -1 Olumlu +1yücel

    20 Oca 10 at

  2. anladigim kadariyla tablo ismini verince ilgili kolonlari bulup her birine istedigin verileri ekliyor yanilmiyorum degil mi gokalp?

    Olumsuz -1 Olumlu +1hc0de

    5 Şub 10 at

  3. evet aynen öyle çalışıyor :)

    Olumsuz -1 Olumlu +1Gökalp Kuşçu

    10 Şub 10 at

  4. array_map benim aşık oldugum bir fonksiyon gercekten cok seviyorum onu :)

    +1 Olumsuz -1 Olumlu +10xyGen

    12 Şub 10 at

  5. Çok Güzel Bir teknik Saol

    +1 Olumsuz -1 Olumlu +1murat

    17 Şub 10 at

bir yorum yaz: