PHP Günleri 2013#1. mysql_* Fonksiyonları Ömrünü Doldurmak Üzere. Peki Şimdi Ne Olacak? Özgür Yazılım A.Ş. www.ozguryazilim.com.tr

Benzer belgeler
İnternet Programcılığı

Php İle Mysql Veritabanından Bilgi Çekme

Script. Statik Sayfa. Dinamik Sayfa. Dinamik Web Sitelerinin Avantajları. İçerik Yönetim Sistemi. PHP Nedir? Avantajları.

Yaptığımız web sitelerinin daha kullanışlı olması için veritabanı sistemleri ile bağlantı kurup ihtiyaca göre verileri okuyup yazmasını isteriz.

PostgreSQL ve PL/pgSQL

PostgreSQL ve PL/pgSQL

Php Programlama Dili MySQL Uygulamaları

WEB PROGRAMLAMA II. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

SAKLI YORDAM (Stored Procedure) Sibel Somyürek

Üst Düzey Programlama

Oracle da kullanılan veri tipleri:

Bölüm 10: PHP ile Veritabanı Uygulamaları

Turquaz. Açık kodlu muhasebe yazılımı Turquaz Proje Grubu

İNTERNET PROGRAMCILIĞI HAFTA MYSQL - PHPMYADMIN. Hazırlayan Fatih BALAMAN. İçindekiler. Hedefler. Mysql Nedir.

V14xx Güncelleme İşlemleri

Aşağıdaki tabloyu inceleyin. Sorgulama işlemlerini bu tabloya göre yapacağız.

Tablolar Arası İlşikiler ve Alan Özellikleri Siparis.musteri_no musteri.musteri_no Siparis.urun_kodu musteri.urun_kodu

SQL'e Giriş. SELECT Deyimi. SQL Komutları. 1. DDL (Data Definition Language - Veri Tanımlama Dili)

VERĐTABANI YÖNETĐM SĐSTEMLERĐ

Üst Düzey Programlama

ÖZGÜR YAZILIMLAR İLE J2EE

Genel Programlama II

Tek dosyalı projeler (siteler) üretmek

PHP 1. Hafta 2.Sunum

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

TESİ. indeks. söylenebilir?? bir ilişkidir d) Hiçbiri. veya somutlaştırılmış. düzeyidir? sağlayabilir? sına. d) Hepsi. olabilir? c) Verilerin d) Hepsi

SP_RENAMEDB eski_isim, yeni_isim VEYA SP_RENAMEDB 'eski isim', 'yeni isim'

DAO İLE SQL KOMUTLARI. Sql komutlarını artık veri tabanında kullanmaktan başka çaremiz yok arkadaşlar. Şimdi bu sql derslerimize başlayalım.

PHP'ye Giriş Türkiye PHP Grubu - Linux Şenlikleri PHP Eğitim / Tanıtım Seminerleri Ankara, 11 Mayıs 2006 Hidayet Doğan <hdogan@hido.

8 Oracle da tablo yapısı içinde otomatik artan kolon yoktur. (identity kolon

10-Veri Tabanları.

SQL Query and Table Application

STORED PROCEDURE LER (Saklı Yordamlar)

Bu makalede 2003 sunucu, Windows 2003 Server anlamına gelmektedir. Aşağıda yapılan işlemler 2003 R2 sunucu üzerinde denenmiş ve çalıştırılmıştır.

PostgreSQL Veritabanı Sunucusu Devrim GÜNDÜZ.

Gitlab ile Web Tabanlı Git Deposu Yönetimi

İNTERNET PROGRAMCILIĞI - II

1.PROGRAMLAMAYA GİRİŞ

Analiz Raporu. Projenin amacının, konusunun, işlevinin ne olacağı, hangi yazılımlar kullanılacak gibi parametrelerin belirlenmesi.

PostgreSQL - Yeni dönemdeki yeri

Veritabanı Tasarımı. Alt Sorgu Temelleri

PostgreSQL ile NoSQL. Gereksinimlerinizi Karşılamak

1. Oracle Data Miner 11g Release 2 Kurulumu Aşamaları

ASP.NET CLASS KULLANARAK VERİTABANI İŞLEMLERİ

SQL veri tabalarına erişmek ve onları kullanmak için geliştirilmiş bir lisandır.

Aşağıdaki şemaya dikkat edin. Sorgulamalarımızı genellikle bu şemaya göre yapacağız.

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

Veritabanı Tasarımı. Seriler ile Çalışma

Arş.Gör.Muhammet Çağrı Gencer Bilgisayar Mühendisliği KTO Karatay Üniversitesi 2015

VERİ TABANI PROGRAMCILIĞI DALI

JasperReports Server ve Ireport raporlama Sistemi Kurulumu / Kullanımı 1. Bölüm 2. Bölüm 1- JasperReports Server ve Ireport Nedir?

Veritabanına Giriş. Oğuzhan Ceylan. 19 Eylül 2011

Oracle Database 11g: Introduction to SQL

DĐNAMĐK ve STATĐK SQL KULLANMANIN PERFORMANSA ETKĐSĐ

Veritabanı Uygulamaları Tasarımı

Birden Çok Tabloda Sorgulama (Join)

İngilizce'de Relational Database Management System (RDBMS) olarak ifade edilir.

ÇÖZÜM BİLGİSAYAR KOLAY RANDEVU RANDEVU WEB SERVİSLERİ YAZILIM FİRMALARI ENTEGRASYON KILAVUZU Sürüm: 1.0

PostgreSQL Veritabanı Sunucusu. 8.2 neler getiriyor?

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

BÖLÜM 3 OPERAT A ÖRLER

PHP ile İnternet Programlama

PostgreSQL Veritabanı Sunucusu. HOT, VACUUM ve BGWRITER

MOBİL UYGULAMA GELİŞTİRME

& (Hosting Desteği)

Bilgisayar Uygulamaları. MySql

İNTERNET PROGRAMCILIĞI DERSİ ÇALIŞMA SORULARI

Giderler & yardım hizmeti saatleri listesi

SP_RENAMEDB eski_isim, yeni_isim VEYA SP_RENAMEDB 'eski isim', 'yeni isim'

Veri Tabanı Yönetim Sistemleri Bölüm - 3

PHP, nesne-yönelimli (object-oriented) bir dil olduğu için, nesne oluşturma imkânına ve bunların kullanılmasını sağlayan metodlara da sahiptir.


Tıbbi bilgilerinizin Ülkesel Bağlantı Noktası (LSP) aracılığıyla kullanıma sunulması

DML işlemleri. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı May Öğr. Gör. Murat KEÇECĠOĞLU

Yukarıdaki örnekte görüldüğü üzere her php komut satırı noktalı virgül (;) ile biter.

Sqlmap pyhton dili yazılarak geliştirilmiş Sql injection için testerlara son derece yardımcı olan bir araçtır.

PHP I PHP I. E. Fatih Yetkin. 26 Eylül 2011

İster sanal sunucularınız kapalı olsun isterseniz açık olsun farketmez taşıma işlemini yine kesinti olmadan gerçekleştirebilirsiniz.

SQL Deyimleri. Öğr.Gör.Volkan ALTINTAŞ Volkanaltintas.com

Ubuntu Hakkında En Çok Sorulan Sorular

Web Uygulamaları Mimarileri ve Güvenliği

Öğr.Gör.Murat KEÇECĠOĞLU. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

Veritabanı Tasarımı. DML İşlemleri ve Görünümler

Kaynak Kod Güvenliği Bir Güvensiz API Örneği

DGS Konu Başlıklarına Dön

Sadece 2 İstekle MySQL Blind SQL Injection. Canberk BOLAT canberk.bolat[-at-]gmail[-dot-]com

Geliştirme Klavuzu İlk Uygulama Hello World

SORGULAR. Öğr.Gör.Volkan Altıntaş

BİLİŞİM TEKNOLOJİLERİ

PostgreSQL ile Kümeleme Teknikleri

İNTERNET PROGRAMCILIĞI - II

Ders Kodu Yarıyıl T+U Saat Kredi AKTS. Programlama Dilleri

Türkiye Yazılımcı Raporu

PostgreSQL - Yeni dönemdeki yeri

2-Hafta Temel İşlemler

LKD Kendi İlacını Kullanıyor

1 / 5. Mehmet Alper Şen. Kıdemli Yazılım Uzmanı. İletişim Bilgileri

Transkript:

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

Adil İlhan Yazılım Geliştirici @adil_ilhan www.adililhan.com adil.ilhan@ozguryazilim.com.tr

PHP ve MySQL Bitirim İ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.

mysql_* dan kasıt nedir? mysql_connect, mysql_query, mysql_fetch_assoc, mysql_fetch_array vb.

Ama artık mysql_* fonksiyonları ömrünü doldurmak üzere!

Madem ömrü doldu neden hâlâ kullanılıyor? Alışkanlık! PHP4'ten 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 fonksiyonlar kullanılamıyor.

Alternatif nedir? Şu an mysql_* fonksiyonları için iki iyi alternatif var: 1) PDO (Php Data Objects) 2) mysqli (MySQL Improved Extension)

Peki alternatifleri var ama, mysql_* fonksiyonları neden artık kullanılmamalı?

Artık deprecated (önerilmemektedir) PHP geliştiricileri mysql_* fonksiyonlarını resmi olarak önermiyor. Geliştirilmesi durdu. 5.5.0'da deprecated olacak (önerilmemeye başlanacak).

Prepared statement (hazır deyim) özelliği yok! Prepared stament ne ola ki?

Prepared Statement'lar Daha performanslı (Hazır Deyimler) Birçok kez çalışacak sorguyu önce derle, sonraki sorgularda daha performanslı çalışsın. Daha güvenli mysql_real_escape_string ve türevlerinden kurtuluş Tırnaklardan sorguyu korur. MySQL 4.1'den beri destekliyor. Yazımı daha kolay ve okunaklı (Bana göre:))

Örnek yazıma geçmeden önce... MySQLi'de MySQL veritabanına bağlanmak: $db = new mysqli('localhost', 'root', '123', 'seminer'); $db = mysqli_connect('localhost', 'root', '123', 'seminer'); PDO'da MySQL veritabanına bağlanmak: $db = new PDO('mysql:dbname=seminer;host=localhost;', 'root', '123');

Örnek yazımı şöyle: $db->prepare('insert INTO seminer (ad, soyad) VALUES (:adi, :soyadi)'); (Bu kullanım şu an sadece PDO'da var.) Bir diğeri: $db->prepare('insert INTO seminer (ad, soyad) VALUES (?,?)'); (Bu kullanımı PDO ve Mysqli destekliyor.)

Parametre Bağlamak (Bind Param) İsimli parametreler PDO'da 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);

Parametre Bağlamak (Bind Param) Soru işaretli değer atamalar hem PDO'da hem MySQLi'de var. Mysqli'de $st = $db->prepare('insert INTO seminer (ad, soyad, yas) VALUES (?,?,?)'); $st->bind_param('ssi', $ad, $soyad, $yas); PDO'da $st->execute(array($ad, $soyad, $yas));

Böylece ne elde ettik? Daha güvenli sorgu çalıştırma imkanı mysql_real_escape_string vs. yeteri kadar iyi değiller. Ekstra kod yazmak gerekiyor. Mysqli ve PDO'da bind param ile güvenlik işini PHP'ye bırakıyoruz.

Böylece ne elde ettik? mysql_* fonksiyonlarından daha hızlı bir sorgu altyapısı. MySQL, sorguyu ilk seferinde analiz edip, her defasında aynı işlemleri tekrarlamıyor. Parametrelere uygun olarak tampondan veriyi sunuyor.

mysql_* fonksiyonlarının yeteneksizliği sadece bu kadar mı? Tabii ki hayır :)

Doğrudan Transaction Desteklenmiyor mysql_* fonksiyonları doğrudan transaction yapmaya olanak sağlamıyor. Ekstra fonksiyonlar yazılarak, veritabanına commit, rollback işlemleri yaptırılıyor.

PDO ve Mysqli Varsayılan Olarak Transaction Destekliyor PDO'da ve Mysqli'de yazılımcının kolayca transaction yapabilmesi için gerekli metodlar sunuluyor. mysql_* fonksiyonlarındaki gibi her rol (start, commit, rollback) için ekstra tanımlama zahmetine girilmiyor.

mysql_ Fonksiyonları Tek Seferde Birden Fazla Sorgu (Multiple queries Yapamıyor Bu sorguyu tek seferde mysql_ fonksiyonları işleyemiyor. Bu sorguyu ancak PDO veya Mysqli ile çalıştırabilirsiniz.

mysql_* fonksiyonları OOP arayüzü desteklemiyor OOP mimarisine uygun kod yazdınız ama mysql_connect ile veritabanına bağlandınız. Metodlara erişirken -> kullanıyorsunuz ama veritabanı işlemleri için alt çizgi (underscore) kullanmak zorundasınız. Göz yorucu değil mi? :)

Sürekli PDO ve Mysqli diyorsun da hangisini seçmek lazım?

İkisi de iyi, ama aralarında ufak tefek farklar var. O farklarla çok iyi oldu çok da güzel oldu. PDO ile 12 farklı veritabanına bağlanabilirsiniz. PDO ile isimli parametre ataması da yapabilirsiniz. PDO'da sadece OOP kullanabilirsiniz. Mysqli'de hem OOP hem procedural kullanılabilir.

İyi güzel de bu fonksiyonlara göç etmek o kadar kolay değil ki... Acı gerçek... :(

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ümde kodunuz güncel teknolojilerden daha da geri de kalacak. Ancak iş dünyasında bu tarz değişimler yapmak oldukça zor. Bunun başlıca sebeplerinden birisi de vakit olmaması. Vakit yetersiz olduğu için gerekli değişimler yapılamıyor. Yapılsa bile birçoğunun unit test'leri yapılmıyor.

mysql_* fonksiyonlarını avcumun içi gibi biliyorum. Yeni fonksiyonları öğrenmek bir sürü iş çıkaracak.

Evet, doğru bir öngörü. Yeni fonksiyonlar iş çıkaracak. Ancak yeni sürümler çıktıkça, kodunuzu güncellemediğiniz takdirde kodunuz geride kalacak. Bu ileride daha çok zahmet oluşturacak.

Peki nasıl göç edeceğiz? Eğer sorguları bir arayüz üzerinden yapıyorsanız işiniz nispeten daha kolay. Arayüz? Ya arayüz yoksa? O zaman işiniz zorlaşacaktır. :(

mysql_* fonksiyonlarını güncel fonksiyonlara göç ettiren bir betik olsa ne güzel olurdu...

Sı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ı mysqli fonksiyonlarına çevirebiliyorsunuz. Betik oldukça başarılı. Örneğin; WordPress'i dönüştürünce birkaç warning dışında sistem eskisi gibi çalışıyor.

Sorularınız? Adil İlhan Yazılım Geliştirici www.adililhan.com www.twitter.com/adil_ilhan www.linkedin.com/in/adililhan