php ve mysql veritabanı sunucusu

33
PHP ve MYSQL Veritabanı Sunucusu

Upload: nira

Post on 26-Jan-2016

139 views

Category:

Documents


8 download

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: PHP  ve  MYSQL Veritabanı Sunucusu

PHP ve

MYSQL Veritabanı Sunucusu

Page 2: 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.

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.

Page 3: PHP  ve  MYSQL Veritabanı Sunucusu

MYSQL sunucusuna PHP kullanarak bağlanmak

Slaytlarımız mysqli ve PDO komutlarını içermektedir.

Page 4: PHP  ve  MYSQL Veritabanı Sunucusu

Takip edilmesi gereken adımlar

1. Bağlantının kurulması2. Veritabanının seçilmesi3. 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ı

Page 5: PHP  ve  MYSQL Veritabanı Sunucusu

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.

Page 6: PHP  ve  MYSQL Veritabanı Sunucusu

MYSQL'e bağlanma (devamı)

Örnek Kullanım

$bag = mysqli_connect("localhost", "mysqli_kullanıcısı", "mysqli_şifresi ", " vt")

if (mysqli_connect_errno($bag)) { echo " Bağlanılamadı. " . mysqli_connect_error(); }

else

{

echo "Bağlantı Ok"; // veya sorguyu çalıştır.

}

Page 7: PHP  ve  MYSQL Veritabanı Sunucusu

Ç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 kodlarında @ ile başlayan satırlar görürüz. Örneğin: @mysqli_select_db($bag,$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.

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

Page 8: PHP  ve  MYSQL Veritabanı Sunucusu

Çalışılacak olan MYSQL veritabanının seçilmesi (devamı)

Örnek Kullanım

mysqli_select_db($bag,“vtadı“) or die("DB bulunamadı: " .

mysqli_error($bag));

VEYA

$ddeger = mysqli_select_db($bag,$dbadi); If ($ddeger==false) { die("DB bulunamadı: " . mysqli_error($bag)); }

Page 9: PHP  ve  MYSQL Veritabanı Sunucusu

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 = mysqli_query($bag,$sorgu);

Page 10: PHP  ve  MYSQL Veritabanı Sunucusu

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

Page 11: PHP  ve  MYSQL Veritabanı Sunucusu

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.

Page 12: PHP  ve  MYSQL Veritabanı Sunucusu

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 : mysqli_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.)

Page 13: PHP  ve  MYSQL Veritabanı Sunucusu

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.

Page 14: PHP  ve  MYSQL Veritabanı Sunucusu

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)

Page 15: PHP  ve  MYSQL Veritabanı Sunucusu

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"]);

}

Page 16: PHP  ve  MYSQL Veritabanı Sunucusu

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

Page 17: PHP  ve  MYSQL Veritabanı Sunucusu

Mysqli_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 (mysqli_pconnect komutu kullanılmış ise).

Örneğin: $bag = mysqli_connect("localhost", "mysqli_kullanicisi", "mysqli_sifresi ", " vt

"); mysqli_close($bag);

Page 18: PHP  ve  MYSQL Veritabanı Sunucusu

19

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

Page 19: PHP  ve  MYSQL Veritabanı Sunucusu

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

Page 20: PHP  ve  MYSQL Veritabanı Sunucusu

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.

Page 21: PHP  ve  MYSQL Veritabanı Sunucusu

22

PDO- Mysql'e Bağlanmak

$dsn = “mysql:dbname=veritabanim”; $kullanici = “root”; $sifre = “sifrem”; $conn = new PDO( $dsn, $kullanici, $sifre);

Page 22: PHP  ve  MYSQL Veritabanı Sunucusu

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

Page 23: PHP  ve  MYSQL Veritabanı Sunucusu

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

Page 24: PHP  ve  MYSQL Veritabanı Sunucusu

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

Page 25: PHP  ve  MYSQL Veritabanı Sunucusu

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

Page 26: PHP  ve  MYSQL Veritabanı Sunucusu

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.

Page 27: PHP  ve  MYSQL Veritabanı Sunucusu

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.

Page 28: PHP  ve  MYSQL Veritabanı Sunucusu

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

Page 29: PHP  ve  MYSQL Veritabanı Sunucusu

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

} }

Page 30: PHP  ve  MYSQL Veritabanı Sunucusu

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

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

Page 31: PHP  ve  MYSQL Veritabanı Sunucusu

32

PDO Değer bağlamaDeğ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.

Page 32: PHP  ve  MYSQL Veritabanı Sunucusu

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

?>

Page 33: PHP  ve  MYSQL Veritabanı Sunucusu

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;