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

Embed Size (px)

DESCRIPTION

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ı.

Citation preview

  • 1. zgr Yazlm A..www.ozguryazilim.com.trPHP Gnleri 2013#1mysql_* Fonksiyonlar mrn Doldurmakzere. Peki imdi Ne Olacak?

2. zgr Yazlm A..www.ozguryazilim.com.trAdil lhanYazlm Gelitirici zgr Yazlm A..@[email protected] 3. zgr Yazlm A..www.ozguryazilim.com.trPHP ve MySQLBitirim kili PHP denilince ilk akla gelenlerden birisi MySQL. Yllarca isimleri birlikte anld. Yllarca mysql_* fonksiyonlar kullanld ve hlkullanlyor. 4. zgr Yazlm A..www.ozguryazilim.com.trmysql_* dan kast nedir?mysql_connect,mysql_query,mysql_fetch_assoc,mysql_fetch_array vb. 5. zgr Yazlm A..www.ozguryazilim.com.trAma artk mysql_* fonksiyonlarmrn doldurmak zere! 6. zgr Yazlm A..www.ozguryazilim.com.trMadem mr doldu neden hlkullanlyor? Alkanlk! PHP4ten beri mysql_connect var. Yeniliklere ayak uyduramama Teknoloji geliiyor laf PHP iin de geerli. Sunucularda eski PHP srmleri var Sunucudaki srm eski olunca, gncel fonksiyonlarkullanlamyor. 7. zgr Yazlm A..www.ozguryazilim.com.trAlternatif nedir?u an mysql_* fonksiyonlar iin iki iyi alternatif var:1) PDO (Php Data Objects)2) mysqli (MySQL Improved Extension) 8. zgr Yazlm A..www.ozguryazilim.com.trPeki alternatifleri var ama, mysql_*fonksiyonlar neden artkkullanlmamal? 9. zgr Yazlm A..www.ozguryazilim.com.trArtk deprecated (nerilmemektedir) PHP gelitiricileri mysql_* fonksiyonlarnresmi olarak nermiyor. Gelitirilmesi durdu. 5.5.0da deprecated olacak (nerilmemeyebalanacak). 10. zgr Yazlm A..www.ozguryazilim.com.trPrepared statement (hazr deyim) zellii yok!Prepared stament ne ola ki? 11. zgr Yazlm A..www.ozguryazilim.com.trPrepared Statementlar(Hazr Deyimler) Daha performansl Birok kez alacak sorguyu nce derle, sonraki sorgulardadaha performansl alsn. Daha gvenli mysql_real_escape_string ve trevlerinden kurtulu Trnaklardan sorguyu korur. MySQL 4.1den beri destekliyor. Yazm daha kolay ve okunakl (Bana gre:)) 12. zgr Yazlm A..www.ozguryazilim.com.trrnek yazma gemeden nce... MySQLide MySQL veritabanna balanmak:$db = new mysqli(localhost, root, 123, seminer);$db = mysqli_connect(localhost, root, 123, seminer); PDOda MySQL veritabanna balanmak:$db = new PDO(mysql:dbname=seminer;host=localhost;, root, 123); 13. zgr Yazlm A..www.ozguryazilim.com.trrnek yazm yle:$db->prepare(INSERT INTO seminer (ad, soyad) VALUES (:adi, :soyadi));(Bu kullanm u an sadece PDOda var.)Bir dieri:$db->prepare(INSERT INTO seminer (ad, soyad) VALUES (?, ?));(Bu kullanm PDO ve Mysqli destekliyor.) 14. zgr Yazlm A..www.ozguryazilim.com.trParametre Balamak (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. zgr Yazlm A..www.ozguryazilim.com.trParametre Balamak (Bind Param)Soru iaretli deer 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. zgr Yazlm A..www.ozguryazilim.com.trBylece ne elde ettik? Daha gvenli sorgu altrma imkan mysql_real_escape_string vs. yeteri kadar iyideiller. Ekstra kod yazmak gerekiyor. Mysqli ve PDOda bind param ile gvenlik iiniPHPye brakyoruz. 17. zgr Yazlm A..www.ozguryazilim.com.trBylece ne elde ettik? mysql_* fonksiyonlarndan daha hzl bir sorgualtyaps. MySQL, sorguyu ilk seferinde analiz edip, herdefasnda ayn ilemleri tekrarlamyor.Parametrelere uygun olarak tampondan veriyisunuyor. 18. zgr Yazlm A..www.ozguryazilim.com.trmysql_* fonksiyonlarnnyeteneksizlii sadece bu kadar m?Tabii ki hayr :) 19. zgr Yazlm A..www.ozguryazilim.com.trDorudan TransactionDesteklenmiyormysql_* fonksiyonlar dorudan transactionyapmaya olanak salamyor.Ekstra fonksiyonlar yazlarak, veritabannacommit, rollback ilemleri yaptrlyor. 20. zgr Yazlm A..www.ozguryazilim.com.trPDO ve Mysqli Varsaylan OlarakTransaction Destekliyor PDOda ve Mysqlide yazlmcnn kolaycatransaction yapabilmesi iin gerekli metodlarsunuluyor.mysql_* fonksiyonlarndaki gibi her rol (start,commit, rollback) iin ekstra tanmlamazahmetine girilmiyor. 21. zgr Yazlm A..www.ozguryazilim.com.trmysql_ Fonksiyonlar Tek SeferdeBirden Fazla Sorgu (Multiple queriesYapamyor Bu sorguyu tek seferde mysql_ fonksiyonlarileyemiyor. Bu sorguyu ancak PDO veyaMysqli ile altrabilirsiniz. 22. zgr Yazlm A..www.ozguryazilim.com.trmysql_* fonksiyonlar OOP arayzdesteklemiyor OOP mimarisine uygun kod yazdnz amamysql_connect ile veritabanna balandnz. Metodlara eriirken -> kullanyorsunuz amaveritaban ilemleri iin alt izgi (underscore)kullanmak zorundasnz. Gz yorucu deil mi? :) 23. zgr Yazlm A..www.ozguryazilim.com.trSrekli PDO ve Mysqli diyorsun dahangisini semek lazm? 24. zgr Yazlm A..www.ozguryazilim.com.trkisi de iyi, ama aralarnda ufaktefek farklar var. O farklarla ok iyioldu ok da gzel oldu. PDO ile 12 farkl veritabanna balanabilirsiniz. PDO ile isimli parametre atamas dayapabilirsiniz. PDOda sadece OOP kullanabilirsiniz. Mysqlide hem OOP hem proceduralkullanlabilir. 25. zgr Yazlm A..www.ozguryazilim.com.tryi gzel de bu fonksiyonlara getmek o kadar kolay deil ki...Ac gerek... :( 26. zgr Yazlm A..www.ozguryazilim.com.tr Piyasada hlen birok projede mysql_*fonksiyonlar kullanlyor. Bunlarn bir ekilde getmesi gerekiyor. G yaplmad takdirde her yeni srmdekodunuz gncel teknolojilerden daha da geri dekalacak. Ancak i dnyasnda bu tarz deiimler yapmakolduka zor. Bunun balca sebeplerinden birisi devakit olmamas. Vakit yetersiz olduu iin gereklideiimler yaplamyor. Yaplsa bile birounun unittestleri yaplmyor. 27. zgr Yazlm A..www.ozguryazilim.com.trmysql_* fonksiyonlarn avcumun iigibi biliyorum. Yeni fonksiyonlarrenmek bir sr i karacak. 28. zgr Yazlm A..www.ozguryazilim.com.trEvet, doru bir ngr.Yeni fonksiyonlar i karacak.Ancak yeni srmler ktka,kodunuzu gncellemediiniztakdirde kodunuz geride kalacak.Bu ileride daha ok zahmetoluturacak. 29. zgr Yazlm A..www.ozguryazilim.com.trPeki nasl g edeceiz? Eer sorgular bir arayz zerindenyapyorsanz iiniz nispeten daha kolay. Arayz? Ya arayz yoksa? O zaman iiniz zorlaacaktr. :( 30. zgr Yazlm A..www.ozguryazilim.com.trmysql_* fonksiyonlarn gncelfonksiyonlara g ettiren bir betikolsa ne gzel olurdu... 31. zgr Yazlm A..www.ozguryazilim.com.trSkmayn cannz o da var :) Oracle, bu g problemi iin bir betik yaynlad. u adreste bulabilirsiniz: http://bit.ly/ttklS8 Betik sayesinde mysql fonksiyonlarn mysqlifonksiyonlarna evirebiliyorsunuz. Betik olduka baarl. rnein; WordPressi dntrnce birkawarning dnda sistem eskisi gibi alyor. 32. zgr Yazlm A..www.ozguryazilim.com.trSorularnz?Adil lhanYazlm Gelitirici zgr Yazlm A..www.adililhan.comwww.twitter.com/adil_ilhanwww.linkedin.com/in/adililhan