php ve mysql veritabanı sunucusu
Post on 26-Jan-2016
132 Views
Preview:
DESCRIPTION
TRANSCRIPT
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.
MYSQL sunucusuna PHP kullanarak bağlanmak
Slaytlarımız mysqli ve PDO komutlarını içermektedir.
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ı
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.
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.
}
Ç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).
Ç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)); }
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);
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!.
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.
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.)
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.
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)
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"]);
}
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);
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);
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)”;
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(); }
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.
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;
top related