Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

PHP ve MYSQL Veritabanı Sunucusu

Benzer bir sunumlar


... konulu sunumlar: "PHP ve MYSQL Veritabanı Sunucusu"— Sunum transkripti:

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 mysqli ve PDO komutlarını içermektedir.

4 PHP – MYSQL Komutları

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

6 MYSQL'e bağlanma Mysql bağlantısı için gerekli komut:
mysqli_connect($sunucu, $kullanici, $sifre,$veritabani); //değişkenler ile mysqli_connect(‘localhost’, ‘root’, ‘susam’,’ veritabanı’); // dizgi(kelimeler) ile Şifre veritabanı kullanıcısının tanımlanma şekline bağlı olarak bazen zorunlu değildir. Standart haricinde bir port ve soket kullanılmışsa $sunucu(sunucu:port:socket) şeklinde tanımlanmalıdır. mysqli_connect_errno($con) Fonksiyon hata varsa hatayı yoksa null döndürür.

7 MYSQL'e bağlanma (devamı)
Örnek Kullanım $bag = mysql_connect("localhost", "mysql_kullanıcısı", "mysql_şifresi ", " vt") if (mysqli_connect_errno($bag)) { echo «Bağlanılamadı. " . mysqli_connect_error(); } else { echo "Bağlantı Ok"; // veya sorguyu çalıştır. }

8 Çalışılacak olan MYSQL veritabanının seçilmesi
Sırada çalışılacak olan veritabanını değiştirme var: mysqli_select_db($bag,$veritabani); //değişken kullanıyorsanız mysqli_select_db($bag,‘phpkitabı’); //dizgi kullanıyorsanız Fonksiyon başarılı olursa TRUE olmaz ise FALSE döndürür. if (!mysqli_select_db($bag,‘phpkitabı’)) die(‘Hata’); Bazen PHP ile başlayan satırlar görürüz. @ 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. 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).

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

10 MYSQL sorguları oluşturmak
mysqli_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=mysqli_query($bag,“SELECT soyadi FROM personel_bilgi WHERE kimlikno<10”); 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($bag,$sorgu);

11 Etkilenen kayıt sayısına bakmak
Eğer sorgumuz INSERT, UPDATE, DELETE, CREATE TABLE, veya DROP TABLE ise ve TRUE döndürmüşse, mysqli_affected_rows ile etkilenen kayıt sayısı görülebilir. $kayit_sayisi = mysqli_affected_rows($bag); Fonksiyon bağlantı değişkenini alır!. 11

12 MYSQL sorguları oluşturmak(devamı)
mysqli_query sorgusu argüman olarak sorgu cümlesini ve zorunlu olmayan bağlantı değişkenini alır. 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.

13 Dönen kayıt sayısını bulmak
Eğer sorgumuz SELECT cümleciğinden oluşuyor ise ve sorgumuz başarılı ise mysqli_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.)

14 Veri kümesinden (dataset) verileri almak
mysqli_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 mysqli_fetch komutlarından biri kullanılmalıdır. Veri alma fonksiyonları: mysqli_fetch_assoc($sonuc) : kayıt alan isimlerinden oluşan dizinle alınır. mysqli_fetch_row($sonuc) : kayıt sayısal isimlerinden oluşan dizinle alınır. mysqli_fetch_object ($sonuc) : kayıt nesne (object) olarak alınır. mysqli_fetch_array ($sonuc) : kayıt alan/sayısal isimlerinden oluşan dizinle alınır. Sadece mysqli_fecth_array işlenecektir.

15 Mysqli_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 NULL döndürür. mysqli_fetch_array() mysqli_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. mysqli_fetch_array() iki argüman alır. İkincisi zorunlu değildir ve aşağıdaki sabitlerden birinden oluşur. MYSQLI_ASSOC, MYSQLI_NUM, ve MYSQLI_BOTH. MYSQLI_BOTH varsayılan değerdir. MYSQLI_ASSOC kullanırsak komutumuz mysql_fetch_assoc() gibi çalışır. MYSQLI_NUM kullanırsak, komutumuz mysql_fetch_row() gibi çalışır. MYSQLI_BOTH, her iki indekslede verilerin alınmasını sağlar. (dizin boyutu iki katına çıkar)

16 Mysqli_Fetch_Array() fonksiyonu(devamı)
$sonuc = mysqli_query($bag,"SELECT ogrno, isim FROM tablom"); while ($satir = mysqli_fetch_array($sonuc, MYSQLI_ASSOC)) { echo $satir["ogrno"].“-”.$satir["isim"]); }

17 Mysqli_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 = mysqli_query($bag,"SELECT ogrno, adi FROM tablom“,$bag); mysqli_free_result($kaynak);

18 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. mysqli_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. mysqli_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 = mysqli_connect("localhost", "mysql_kullanicisi", "mysql_sifresi ", " vt "); mysql_close($bag);

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

20 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 );

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

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

23 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 );

24 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() ..

25 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 );

26 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 / > ”; }

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

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

29 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ü.

30 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."; } }

31 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)”; $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(); }

32 BindValue ve BindParameter
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.

33 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"); ?>

34 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;


"PHP ve MYSQL Veritabanı Sunucusu" indir ppt

Benzer bir sunumlar


Google Reklamları