Php’de tüm tablolar için ortak insert function
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
















kanka yine dellenmişssin sanırım
20 Oca 10 at
anladigim kadariyla tablo ismini verince ilgili kolonlari bulup her birine istedigin verileri ekliyor yanilmiyorum degil mi gokalp?
5 Şub 10 at
evet aynen öyle çalışıyor
10 Şub 10 at
array_map benim aşık oldugum bir fonksiyon gercekten cok seviyorum onu
+1
0xyGen
12 Şub 10 at
Çok Güzel Bir teknik Saol
+1
murat
17 Şub 10 at