Your SlideShare is downloading. ×
PHP Günleri #1 / mysql_* Fonksiyonları Ömrünü Doldurmak Üzere. Peki Şimdi Ne Olacak?
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

PHP Günleri #1 / mysql_* Fonksiyonları Ömrünü Doldurmak Üzere. Peki Şimdi Ne Olacak?

371
views

Published on

25 Mayıs 2013 tarihinde, PHP Günleri #1'de mysql_* (mysql_connect, mysql_query vb.) fonksiyonlarının neden kullanılmaması konusu üzerine yaptığım sunumun dosyası.

25 Mayıs 2013 tarihinde, PHP Günleri #1'de mysql_* (mysql_connect, mysql_query vb.) fonksiyonlarının neden kullanılmaması konusu üzerine yaptığım sunumun dosyası.

Published in: Technology

1 Comment
1 Like
Statistics
Notes
No Downloads
Views
Total Views
371
On Slideshare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
8
Comments
1
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Özgür Yazılım A.Ş.www.ozguryazilim.com.trPHP Günleri 2013#1mysql_* Fonksiyonları Ömrünü DoldurmakÜzere. Peki Şimdi Ne Olacak?
  • 2. Özgür Yazılım A.Ş.www.ozguryazilim.com.trAdil İlhanYazılım Geliştirici – Özgür Yazılım A.Ş.@adil_ilhanwww.adililhan.comadil.ilhan@ozguryazilim.com.tr
  • 3. Özgür Yazılım A.Ş.www.ozguryazilim.com.trPHP ve MySQLBitirim İkili● PHP denilince ilk akla gelenlerden birisi MySQL.● Yıllarca isimleri birlikte anıldı.● Yıllarca mysql_* fonksiyonları kullanıldı ve hâlâkullanılıyor.
  • 4. Özgür Yazılım A.Ş.www.ozguryazilim.com.trmysql_* dan kasıt nedir?mysql_connect,mysql_query,mysql_fetch_assoc,mysql_fetch_array vb.
  • 5. Özgür Yazılım A.Ş.www.ozguryazilim.com.trAma artık mysql_* fonksiyonlarıömrünü doldurmak üzere!
  • 6. Özgür Yazılım A.Ş.www.ozguryazilim.com.trMadem ömrü doldu neden hâlâkullanılıyor?● Alışkanlık!● PHP4ten beri mysql_connect var.● Yeniliklere ayak uyduramama● “Teknoloji gelişiyor” lafı PHP için de geçerli.● Sunucularda eski PHP sürümleri var● Sunucudaki sürüm eski olunca, güncel fonksiyonlarkullanılamıyor.
  • 7. Özgür Yazılım A.Ş.www.ozguryazilim.com.trAlternatif nedir?Şu an mysql_* fonksiyonları için iki iyi alternatif var:1) PDO (Php Data Objects)2) mysqli (MySQL Improved Extension)
  • 8. Özgür Yazılım A.Ş.www.ozguryazilim.com.trPeki alternatifleri var ama, mysql_*fonksiyonları neden artıkkullanılmamalı?
  • 9. Özgür Yazılım A.Ş.www.ozguryazilim.com.trArtık deprecated (önerilmemektedir)● PHP geliştiricileri mysql_* fonksiyonlarını“resmi” olarak önermiyor.● Geliştirilmesi durdu.● 5.5.0da deprecated olacak (önerilmemeyebaşlanacak).
  • 10. Özgür Yazılım A.Ş.www.ozguryazilim.com.trPrepared statement (hazır deyim) özelliği yok!Prepared stament ne ola ki?
  • 11. Özgür Yazılım A.Ş.www.ozguryazilim.com.trPrepared Statementlar(Hazır Deyimler)● Daha performanslı● Birçok kez çalışacak sorguyu önce derle, sonraki sorgulardadaha performanslı çalışsın.● Daha güvenli● mysql_real_escape_string ve türevlerinden kurtuluş● Tırnaklardan sorguyu korur.● MySQL 4.1den beri destekliyor.● Yazımı daha kolay ve okunaklı (Bana göre:))
  • 12. Özgür Yazılım A.Ş.www.ozguryazilim.com.trÖrnek yazıma geçmeden önce...● MySQLide MySQL veritabanına bağlanmak:$db = new mysqli(localhost, root, 123, seminer);$db = mysqli_connect(localhost, root, 123, seminer);● PDOda MySQL veritabanına bağlanmak:$db = new PDO(mysql:dbname=seminer;host=localhost;, root, 123);
  • 13. Özgür Yazılım A.Ş.www.ozguryazilim.com.trÖrnek yazımı şöyle:$db->prepare(INSERT INTO seminer (ad, soyad) VALUES (:adi, :soyadi));(Bu kullanım şu an sadece PDOda var.)Bir diğeri:$db->prepare(INSERT INTO seminer (ad, soyad) VALUES (?, ?));(Bu kullanımı PDO ve Mysqli destekliyor.)
  • 14. Özgür Yazılım A.Ş.www.ozguryazilim.com.trParametre Bağlamak (Bind Param)İsimli parametreler PDOda var.$q = $db->prepare(INSERT INTO seminer (ad, soyad, yas) VALUES (:adi, :soyadi, :yasi));$q->bindParam(:adi,$ad);$q->bindParam(:soyadi,$soyad);$q->bindParam(:yasi,$yas);
  • 15. Özgür Yazılım A.Ş.www.ozguryazilim.com.trParametre Bağlamak (Bind Param)Soru işaretli değer atamalar hem PDOda hem MySQLide var.Mysqlide$st = $db->prepare(INSERT INTO seminer (ad, soyad, yas) VALUES (?, ?, ?));$st->bind_param(ssi, $ad, $soyad, $yas);PDOda$st->execute(array($ad, $soyad, $yas));
  • 16. Özgür Yazılım A.Ş.www.ozguryazilim.com.trBöylece ne elde ettik?● Daha güvenli sorgu çalıştırma imkanı● mysql_real_escape_string vs. yeteri kadar iyideğiller. Ekstra kod yazmak gerekiyor.● Mysqli ve PDOda bind param ile güvenlik işiniPHPye bırakıyoruz.
  • 17. Özgür Yazılım A.Ş.www.ozguryazilim.com.trBöylece ne elde ettik?● mysql_* fonksiyonlarından daha hızlı bir sorgualtyapısı.● MySQL, sorguyu ilk seferinde analiz edip, herdefasında aynı işlemleri tekrarlamıyor.Parametrelere uygun olarak tampondan veriyisunuyor.
  • 18. Özgür Yazılım A.Ş.www.ozguryazilim.com.trmysql_* fonksiyonlarınınyeteneksizliği sadece bu kadar mı?Tabii ki hayır :)
  • 19. Özgür Yazılım A.Ş.www.ozguryazilim.com.trDoğrudan TransactionDesteklenmiyormysql_* fonksiyonları doğrudan transactionyapmaya olanak sağlamıyor.Ekstra fonksiyonlar yazılarak, veritabanınacommit, rollback işlemleri yaptırılıyor.
  • 20. Özgür Yazılım A.Ş.www.ozguryazilim.com.trPDO ve Mysqli Varsayılan OlarakTransaction Destekliyor● PDOda ve Mysqlide yazılımcının kolaycatransaction yapabilmesi için gerekli metodlarsunuluyor.mysql_* fonksiyonlarındaki gibi her rol (start,commit, rollback) için ekstra tanımlamazahmetine girilmiyor.
  • 21. Özgür Yazılım A.Ş.www.ozguryazilim.com.trmysql_ Fonksiyonları Tek SeferdeBirden Fazla Sorgu (Multiple queriesYapamıyor●● Bu sorguyu tek seferde mysql_ fonksiyonlarıişleyemiyor. Bu sorguyu ancak PDO veyaMysqli ile çalıştırabilirsiniz.
  • 22. Özgür Yazılım A.Ş.www.ozguryazilim.com.trmysql_* fonksiyonları OOP arayüzüdesteklemiyor● OOP mimarisine uygun kod yazdınız amamysql_connect ile veritabanına bağlandınız.● Metodlara erişirken -> kullanıyorsunuz amaveritabanı işlemleri için alt çizgi (underscore)kullanmak zorundasınız.● Göz yorucu değil mi? :)
  • 23. Özgür Yazılım A.Ş.www.ozguryazilim.com.trSürekli PDO ve Mysqli diyorsun dahangisini seçmek lazım?
  • 24. Özgür Yazılım A.Ş.www.ozguryazilim.com.trİkisi de iyi, ama aralarında ufaktefek farklar var. O farklarla çok iyioldu çok da güzel oldu.● PDO ile 12 farklı veritabanına bağlanabilirsiniz.● PDO ile isimli parametre ataması dayapabilirsiniz.● PDOda sadece OOP kullanabilirsiniz.● Mysqlide hem OOP hem proceduralkullanılabilir.
  • 25. Özgür Yazılım A.Ş.www.ozguryazilim.com.trİyi güzel de bu fonksiyonlara göçetmek o kadar kolay değil ki...Acı gerçek... :(
  • 26. Özgür Yazılım A.Ş.www.ozguryazilim.com.tr● Piyasada hâlen birçok projede mysql_*fonksiyonları kullanılıyor. Bunların bir şekilde göçetmesi gerekiyor.● Göç yapılmadığı takdirde her yeni sürümdekodunuz güncel teknolojilerden daha da geri dekalacak.● Ancak iş dünyasında bu tarz değişimler yapmakoldukça zor. Bunun başlıca sebeplerinden birisi de“vakit olmaması”. Vakit yetersiz olduğu için gereklideğişimler yapılamıyor. Yapılsa bile birçoğunun unittestleri yapılmıyor.
  • 27. Özgür Yazılım A.Ş.www.ozguryazilim.com.trmysql_* fonksiyonlarını avcumun içigibi biliyorum. Yeni fonksiyonlarıöğrenmek bir sürü iş çıkaracak.
  • 28. Özgür Yazılım A.Ş.www.ozguryazilim.com.trEvet, doğru bir öngörü.Yeni fonksiyonlar iş çıkaracak.Ancak yeni sürümler çıktıkça,kodunuzu güncellemediğiniztakdirde kodunuz geride kalacak.Bu ileride daha çok zahmetoluşturacak.
  • 29. Özgür Yazılım A.Ş.www.ozguryazilim.com.trPeki nasıl göç edeceğiz?● Eğer sorguları bir arayüz üzerindenyapıyorsanız işiniz nispeten daha kolay.● Arayüz?● Ya arayüz yoksa?– O zaman işiniz zorlaşacaktır. :(
  • 30. Özgür Yazılım A.Ş.www.ozguryazilim.com.trmysql_* fonksiyonlarını güncelfonksiyonlara göç ettiren bir betikolsa ne güzel olurdu...
  • 31. Özgür Yazılım A.Ş.www.ozguryazilim.com.trSıkmayın canınızı o da var :)● Oracle, bu göç problemi için bir betik yayınladı.● Şu adreste bulabilirsiniz: http://bit.ly/ttklS8● Betik sayesinde mysql fonksiyonlarını mysqlifonksiyonlarına çevirebiliyorsunuz.● Betik oldukça başarılı.● Örneğin; WordPressi dönüştürünce birkaçwarning dışında sistem eskisi gibi çalışıyor.
  • 32. Özgür Yazılım A.Ş.www.ozguryazilim.com.trSorularınız?Adil İlhanYazılım Geliştirici – Özgür Yazılım A.Ş.www.adililhan.comwww.twitter.com/adil_ilhanwww.linkedin.com/in/adililhan