1 / 33

PHP ve MYSQL Veritabanı Sunucusu

PHP ve MYSQL Veritabanı Sunucusu. PHP den MYSQL'e bağlantı. Mysql – Eğer programınızı tamamen kodluyorsanız en iyi performansı MySql sözdizimi(syntax) en iyi seçenektir.

nira
Download Presentation

PHP ve MYSQL Veritabanı Sunucusu

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. PHP ve MYSQL Veritabanı Sunucusu

  2. PHP den MYSQL'e bağlantı Mysql – Eğer programınızı tamamen kodluyorsanız en iyi performansı MySql sözdizimi(syntax) en iyi seçenektir. mysqli (MySQL improved(geliştirilmiş)) — Bu eklentiler (extension) özellikle MYSQL için geliştirilmiştir ve PHP den MYSQL'i kullanmak için gereken en geniş olanakları sağlar. MYSQL 4.1 ve sonrasını destekler. Nesne tabanlı ve öntnımlı fonksiyon tabanlı komutları mevcuttur. PDO (PHP Data Objects) — Nesneye dayalı eklentidir. Veri tabanlarına erişimi ve kullanımı basitleştirmek için geliştirilmiştir. PDO komutları MySql, PostgreSQL, Oracle ve daha birçok veritabanına komut farklılığı olmadan(aynı komutları kullanarak) ulaşmayı sağlar.

  3. MYSQL sunucusuna PHP kullanarak bağlanmak Slaytlarımız mysql ve PDO komutlarını içermektedir.

  4. Takip edilmesi gereken adımlar 1. Bağlantının kurulması 2. Veritabanının seçilmesi 3. Sorgu'nun çalıştırılması 4. Eğer sorgu “select” cümleciğinden oluşmuşsa dönen kayıt sayısı, kayıtların teker teker okunması ve eğer gerekli ise hafızanın boşaltılması işlemleri. Eğer sorgu “insert,delete update” cümleciklerinden oluşuyorsa etkilenen kayıt sayısı alınır.(sorugunun başarılı olup olmadığını öğrenmek için). 5. Eğer gerekli ise bağlantının kapatılması/koparılması

  5. MYSQL'e bağlanma Mysql bağlantısı için gerekli komut: mysql_connect($sunucu, $kullanici, $sifre); //değişkenler ile mysql_connect(‘localhost’, ‘root’, ‘susam’); // dizgi(kelimeler) ile Şifre veritabanı kullanıcısının tanımlanma şekline bağlı olarak bazen zorunlu değildir. Zorunlu değil ise fonksiyon iki parametre ile çalıştırılmalıdır. Standart haricinde bir port ve soket kullanılmışsa $sunucu(sunucu:port:socket) şeklinde tanımlanmalıdır. Fonksiyon hata varsa FALSE yoksa dinamik bağ tanımlayıcısını (link identifier) döndürür.

  6. MYSQL'e bağlanma (devamı) Örnek Kullanım $bag = mysql_connect("localhost", "mysql_kullanıcısı", "mysql_şifresi") or die("Bağlanılamıyor: " . mysql_error()); VEYA $bag = mysql_connect("localhost", "mysql_kullanıcısı", "mysql_sifresi"); If ($bag==false) { die("Bağlanılamıyor: " . mysql_error()); }

  7. Çalışılacak olan MYSQL veritabanının seçilmesi Sırada çalışılacak olan veritabanını seçme var: mysql_select_db($veritabani,$bag); //değişken kullanıyorsanız mysql_select_db(‘phpkitabı’,$bag); //dizgi kullanıyorsanız $bag (bağ tanımlayıcısı) eğer sayfada tek bir bağlantı varsa zorunlu değildir Fonksiyon başarılı olursa TRUE olmaz ise FALSE döndürür. Bazen PHP kodlarında @ ile başlayan satırlar görürüz. Örneğin: @mysql_select_db($database). @ sessiz modunda anlamını taşır. Anlamı başarısızlık durumunda hata mesajı döndürmedir. Güvenlik amacı ile kullanılır. Kullanılan Web sunucusu üzerindeki php.ini dosyasında display_errors=0 da aynı işi görür. Her bağlantıdan sonra veritabanı seçilmelidir. Bu da her sayfada en az bir defa anlamına gelir. Kullanıcı için tek bir veritabanı yaratmış bile olsanız durum değişmez çünkü MYSQL 'mysql' ve 'test' adında en az iki veritabanı otomatik olarak kurulmuş şekilde gelir. 'mysql' veritabanı MYSQL sunucusunun çalışmasını sağlar(Sunucu kullanıcıları gibi bilgiler bu veritabanında bulunur).

  8. Çalışılacak olan MYSQL veritabanının seçilmesi (devamı) Örnek Kullanım mysql_select_db(“dbadı“,$bag) or die("DB bulunamadı: " . mysql_error()); VEYA $ddeger = mysql_select_db($dbadi,$bag); If ($ddeger==false) { die("DB bulunamadı: " . mysql_error()); }

  9. MYSQL sorguları oluşturmak mysql_query() fonksiyonu ve bu fonksiyonun parametresi olarak MYSQL komutu/sorgusu PHP den veritabanı sorugulaması için yeterlidir. Bu fonksiyonla temel SQL sorguları kullanılır. Bunlar SELECT, INSERT,UPDATE ve DELETE dir. Ayrıca tablo yaratmak için kullanılan CREATE ve DROP komutlarıda kullanılabilir (Eğer MYSQL istemcisi(client) kullanmak istemiyorsak). Örneğin: $sonuc=mysql_query(“SELECT soyadi FROM personel_bilgi WHERE kimlikno<10”,$bag); // $bag eğer tek bir bağlantı varsa zorunlu değildir. Eğer sorguyu aşağıdaki gibi değişken kullanarak yazarsak sorguda hata olup olmadığını anlamak için sorguyu gezginimizde yayınlamak daha kolay olabilir. $sorgu = “SELECT soyadi FROM personel_bilgi WHERE kimlikno<10”; $sonuc = mysql_query($sorgu,$bag);

  10. MYSQL sorguları oluşturmak(devamı) mysql_query sorgusu argüman olarak sorgu cümlesini ve zorunlu olmayan bağlantı değişkenini alır. Aynı sayfa içinde birden çok bağlantı yoksa bağlantı değişkenine gerek yoktur. Eğer sorgulama SELECT, SHOW, EXPLAIN veya DESCRIBE ise kaynak değişkeni(tanımlayıcısı) veya FALSE döndürür. Diğer bütün sorgular için: Sorgu başarılı ise TRUE (sıfırdan farklı bir dogal sayı) Sorgu başarısız ise FALSE döner.

  11. Etkilenen kayıt sayısını bulmak Eğer sorgumuz INSERT, UPDATE, DELETE, CREATE TABLE, veya DROP TABLE ise ve sorgu başarılı ise, etkilenen kayıt sayısını bulmak için mysql_affected_rows fonksiyonu kullanılabilir. Bu fonksiyon zorunlu olmayan bağlantı tanımlayıcısını argüman olarak kabul eder (eğer birden fazla bağlantı var ise). $affected_rows = mysql_affected_rows(); $affected_rows = mysql_affected_rows($bag);

  12. Dönen kayıt sayısını bulmak Eğer sorgumuz SELECT cümleciğinden oluşuyor ise ve sorgumuz başarılı ise mysql_num_rows($sonuc) bize sorgu sonucu seçilen kayıt sayısını döndürür. Not : mysql_num_rows fonksiyonu sayfa düzenlemede (paginating) büyük yardımcıdır. (Örneğin google araması sonucu aşağıdaki sayfa linkleri gibi her sayfada kaç kayıt var ve toplamda kaç sayfa listelenecek.)

  13. Veri kümesinden (dataset) verileri almak mysql_query ile sorgulama yapılınca veritabanından çekilen veriler ne MYSQL nede PHP tarafından erişilebilinen özel bir yerde tutulur. Verileri bu özel alandan alabilmek için mysql_fetch komutlarından biri kullanılmalıdır. Veri alma fonksiyonları: mysql_fetch_assoc() : kayıt alan isimlerinden oluşan dizinle alınır. mysql_fetch_row: kayıt sayısal isimlerinden oluşan dizinle alınır. mysql_fetch_object: kayıt nesne (object) olarak alınır. mysql_fetch_array: kayıt alan/sayısal isimlerinden oluşan dizinle alınır. mysql_result: Tek bir değer alınır.(İlk alanın ilk değeri) Sadece mysql_fecth_array işlenecektir.

  14. Mysql_Fetch_Array() fonksiyonu Kayıtları alan adlarından oluşan dizinler, sayısal adlardan oluşan dizinler veya her ikisinden oluşan dizinler olarak almamızı sağlar Ya sıradaki kaydı alır yada alınacak kayıt yoksa FALSE döndürür. mysql_fetch_array()mysql_fetch_row() un gelişmiş şeklidir. Sayısal indekslerden oluşan dizinler yanı sıra alan adlarından oluşan indeksleri içeren dizinler de verileri veritabanından almamızı sağlar. mysql_fetch_array() iki argüman alır. İkincisi zorunlu değildir ve aşağıdaki sabitlerden birinden oluşur. MYSQL_ASSOC, MYSQL_NUM, ve MYSQL_BOTH. MYSQL_BOTH varsayılan değerdir. MYSQL_ASSOC kullanırsak komutumuz mysql_fetch_assoc() gibi çalışır. MYSQL_NUM kullanırsak, komutumuz mysql_fetch_row() gibi çalışır. MYSQL_BOTH, her iki indekslede verilerin alınmasını sağlar. (dizin boyutu iki katına çıkar)

  15. Mysql_Fetch_Array() fonksiyonu(devamı) $sonuc = mysql_query("SELECT ogrno, isim FROM tablom"); while ($satir = mysql_fetch_array($sonuc, MYSQL_ASSOC)) { echo $satir["ogrno"].“-”.$satir["isim"]); }

  16. Mysql_Free_Result fonksiyonu Hafızadan sonucu temizler. Tek bir argüman kabul eder ve bu mysql_query'nin sonucu olan kaynak değişkenidir. Eğer bilgisayardaki hafızamız sınırlı veya dönen veri kümesi çok büyük ise kullanılır. Her PHP dosyası sonunda kullanılan bütün hafıza normalde otomatik olarak temizlenir. Başarılı ise TRUE değilse FALSE döndürür. Örneğin: $kaynak = mysql_query("SELECT ogrno, adi FROM tablom“,$bag); mysql_free_result($kaynak);

  17. Mysql_Close() fonksiyonu MYSQL sunucusu ile aradaki bağı koparır. Başarılı ise TRUE değilse FALSE döndürür. Tek bir argüman kabul eder bu da bağlantı değişkenidir. mysql_close() bağlantı değişkeninin kullanıldığı bağlantıyı kapatmamızı/kesmemizi sağlar. Eğer bağlantı değişkeni kullanılmamış ise son açılan bağlantı kapatılır. mysql_close() genellikle gerekli bir komut değildir çünkü her sayfanın sonunda açık olan bütün bağlantılar otomatik olarak kapatılır. Bu komut özellikle açılan kalıcı bağlantılar için önemlidir (mysql_pconnect komutu kullanılmış ise). Örneğin: $bag = mysql_connect("localhost", "mysql_kullanicisi", "mysql_sifresi") or die("Bağlanılamadı: " . mysql_error()); mysql_close($bag);

  18. PHP – PDO Komutları PDO adı gibi nesneye dayalı eklentidir.

  19. PDO- MYSQL'e Bağlamak Bağlantı kurmak için tek yapılması gereken yeni bir PDO nesnesi yaratmaktır. Bu nesneyi yaratırken üç argüman kullanılmalıdır.Bunlar: veritabanını tarif eden DSN; Kullanıcı adı ve şifredir. Yaratılan nesne bizim bağlantı nesnemizdir. $conn = new PDO( $dsn, $kullaniciadi, $sifre );

  20. PDO- MYSQL'e bağlanmak DSN , veya Veritabanı Kaynak Adı, basitçe bağlanılacak veritabanı, veritabanı sunucusunun adresi ve kullanılacak veritabanından oluşur. Örneğin: $dsn = “mysql:host=localhost;dbname=mydatabase”; Eğer host tanımlanmaz ise varsayılan host localhost dur.

  21. PDO- Mysql'e Bağlanmak $dsn = “mysql:dbname=veritabanim”; $kullanici = “root”; $sifre = “sifrem”; $conn = new PDO( $dsn, $kullanici, $sifre);

  22. Hata Ayıklama Veritabanı hataları takibi en zor hatalardır.PDO nesnesi yardımı ile hataları detaylı olarak takip edebiliriz.Bu takip PDOException nesneleri kullanılarak yapılır. PHP de hata ayıklama için kullanılan try..catch bloğu ile hataları kolay biir şekilde ayıklayabiliriz. PDO nesnesinin veritabanı hatası oluşunca bunu anons etmesi için (try..catch bolğu ile yakalayabilecek şekilde) PDO nesnesinin hata modunun aşağıdaki gibi ayarlanması gerekmektedir. Bu işlem için PDO::SetAttribute metodu kullanılır. $conn = new PDO( $dsn, $kullanici, $sifre); $conn- > setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

  23. Hata Ayıklama Aşağıdaki örnekte bağlantı kurulmaya çalışılıyor. Kurulamaz ise bağlantı hatası gezginimizde yayınlanıyor: try { $bag = new PDO( $dsn, $kullaniciadi, $sifre ); $bag- > setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); } catch ( PDOException $e ) { echo “Bağlantı hatası: “ . $e- > getMessage(); } PHP try bloğundaki kodu çalıştırmayı dener. Eğer PDO tarafından herhangi bir hata dönerse catch bloğu PDOException nesnesi yardımı ile hata mesajını yayınlar $e - > getMessage() ..

  24. PDO- Veri alımı Bağlantı kurulduktan sonra SELECT sorgulaması sonucu geriye dönen verileri okumak için yapılması gerekenler: SQL cümleciğini çalıştırmak için: $bag- > query ( $sql ); Eğer SQL sorgumuz veri kümesi döndürüyorsa bunu elde edebilmek için bir değişken kullanılmalıdır. $sonuc = $bag- > query ( $sql );

  25. PDO- Veri Okuma $bag - > query sonucu PDOStatement adındaki başka bir nesnedir. Bu nesne veri kümesindeki kayıtları bir bir okuyabilmek amacı ile foreach döngüsü ile kullanılabilir . Her sonuç alan ismi ile ilişkilendirilmiş bir dizinden oluşur. Örneğin: $sql = “SELECT * FROM meyve”; $sonuc = $bag- > query( $sql ); foreach ( $sonuc as $kayit ) { echo “isim = “ . $kayit[“isim”] . “ < br / > ”; echo “renk = “ . $kayit[“renk”] . “ < br / > ”; }

  26. PDO- Veri okuma 2. Versiyon /* PHP değişkenleri bağlayarak çalıştırma */ $kalori = 150; $renk = 'red'; $sth = $bag->prepare('SELECT isim, renk, kalori FROM meyve WHERE kalori < :kals AND renk = :renk'); $sth->bindParam(':kals', $kalori, PDO::PARAM_INT); $sth->bindParam(':renk', $renk, PDO::PARAM_STR, 12); $sth->execute(); /*Veri kümesindeki bütün kayıtları okumak için */ $sonuc = $sth->fetchAll(); // sonuc hem ad ile ilişkilendirilmiş //hem de sayısal indeksten oluşan dizindir Değerleri parametre olarak geçirmek daha güvenli bir yöntemdir. Üstelik özel karakterler konusunda kaygılanmamıza da gerek yoktur.

  27. PDO Parametreleri bağlama Parametreyi bir değişkene bağlama. bindParam(':renk', $renk, PDO::PARAM_STR, 12) bindParam ( $parametre , &$degisken [, int $veri_turu [, int $uzunlugu [,$surucu_secenekleri ]]] ) Parametre: :isim şeklinde parametre adıdır. değişken: PHP değişkenidir. veri_turu: Tanımlı veri türleridir bunlar PDO::PARAM_* sabitleridir. uzunlugu: Verinin uzunluğudur.

  28. PDO Parametreleri- Bazı veri türleri PDO::PARAM_BOOL boolean veri türü. PDO::PARAM_NULL Null veri türü. PDO::PARAM_INT Integer(tam sayı) veri türü. PDO::PARAM_STR SQL de tanımlı CHAR, VARCHAR, veya diğer string veri türleridir. PDO::PARAM_LOB SQL Büyük nesne veri türü. PDO::PARAM_STMT Kayıtseti(recordset) türü.

  29. PDO- Select sorgusundaki kayıt sayısını bulma $sql = "SELECT COUNT(*) FROM meyve WHERE kalori > 100"; if ($res = $bag->query($sql)) { if ($res->fetchColumn() > 0) { $sql = "SELECT isim FROM meyve WHERE kalori > 100"; foreach ($bag->query($sql) as $kayit) { print "İsim: " . $kayit['NAME'] . "\n"; } } else { print "Uyan kayıt yok."; } }

  30. PDO – Verileri İşleme try { $bag = new PDO( $dsn, $kullanici, $sifre ); $bag->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); } catch ( PDOException $e ) { echo “Bağlantı hatası: “ . $e->getMessage(); } $k = “emre”; $s = “sifrem”; $sql = “INSERT INTO members(username,password) VALUES (:kul, :sif)”; try { $st = $bag- > prepare( $sql ); $st- > bindValue( “:kul”, $k, PDO::PARAM_STR ); $st- > bindValue( “:sif”, $s, PDO::PARAM_STR ); $st- > execute(); } catch ( PDOException $e ) { echo “Sorgu hatası: “ . $e->getMessage(); }

  31. PDO Değer bağlama Değeri parametreye bağlama: bindValue( “:kullaniciadi”, $kullaniciadi, PDO::PARAM_STR ); bindvalue ( $parametre , $deger [, int $veri_turu] ) Parametre: :isim şeklinde parametre adıdır. değer: PHP değişkeninin o anki değeridir. veri_turu: Tanımlı veri türleridir bunlar PDO::PARAM_* sabitleridir. BindValue ve BindParameter bindValue() nun tersine, bindParameter() de değişkenler referans olarak bağlanır ve execute() çağrıldığında o anki değerleri ne ise o değerler işleme sokulur. BindValue() da ise bağlanma sırasındaki değerleri kullanılır.

  32. PDO Etkilenen kayıt sayısı rowCount() DELETE, INSERT, veya UPDATE sorgularının sonucunda etkilenen kayıt sayısını bulmaya yarar. <?php /* Meyve tablosundaki bütün kayıtları sil */ $del = $bag->prepare('DELETE FROM meyve'); $del->execute(); /*Kaç kayıt silindiyi yayınla */ $count = $del->rowCount(); print("Silinen kayıt sayısı: $count .\n"); ?>

  33. PDO- Bağlantıyı kapatma Bağlantıyı kapatmak için bağlantı değişkenine null değerini atamak yeterlidir.Bu işlem PDO nesnesini dolayısı ile bağlantıyı yok eder. $bag = null;

More Related