PHP ve MYSQL Veritabanı Sunucusu

Slides:



Advertisements
Benzer bir sunumlar
T sql-diğer komutlar Metin Akbulut.
Advertisements

PHP ve MYSQL.
COME 339 JAVA-SQL BAĞLANTISI
VB.net ile SQL SERVER’a bağlanmak
MySQL Veritabanı Sunucusu ve MySQL Veritabanı Kullanımı
Veri ve Veri Yapıları Genel olarak bilgisayarlar.
PHP ve MySQL Web Yazılımı Gülin ÜTEBAY Bilgisayar Mühendisi
VERİ TABANI YÖNETİMİ Ders 11: PL/SQL’e Giriş
SQL Enjeksiyon Saldırı Uygulaması ve Güvenlik Önerileri
SQL de Değişken Tanımlama
Dizi (array) değişkenleri
SQL Komutlar 5 Sibel SOMYÜREK.
PHP İle GÜVENLİ KODLAMA
EkoPC Bilişim Ltd. Eğitim Hizmetleri
Veri Tabanı Yönetim Sistemleri
Fonksiyonlar Hafta 4.
Veritabanı Yönetim Sistemleri Hızlı ve Kısa Giriş
Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License. The OWASP.
VeriTabanı Uygulama. Tabloları yaratmak için MySQL komutları.
Tetikleyici. Nedir? Bir tablo üzerinde Ekleme silme ve güncellemeye bağlı olarak tetiklenip çalışan SQL kodlarıdır. Genel amacı veri bütünlüğünü korumaktır.
SQL (STRUCTURED QUERY LANGUAGE)
1 MySQL Kullanımı Structured Query Language. 2 MySQL Nedir? Veritabanıdır. Tablolardan oluşur. Bilgiler tablolarda saklanır.
MySQL, SQL ve PHP Öğr.Gör.Şükrü KAYA.
Bilgisayar Mühendisliği Bölümü
MYSQL 4. HAFTA. mySQL veri türleri INTTamsayı: 'den kadar değişen diziye "signed" (işaretli), 0'dan 'e kadar değişenine.
VIEW (BAKIŞ) OLUŞTURMA
Bilgisayar Mühendisliği Bölümü
SQL Dili ve MySQL Komutları
SQL de Değişken Tanımlama
LINQ (Language Integrated Query)
PHP ve MYSQL.
Iletisim Icin : Blog : E - Mail :
İnternet Programcılığı II
VeriTabanı Uygulama.
İnternet Programlama PHP.
Chapter 6: Using Arrays.
SQL Sibel SOMYÜREK.
SQL Komutları (2) Uzm. Murat YAZICI.
LINQtoSQL Silverligth Uygulamalarında LinqtoSql. LINQ (Language Integrated Query) özellikle dil içerisinde, Sql tarzı sorgular yazabilmemizi ve bunları.
Bilgisayar Mühendisliği Bölümü
İKMAP İnternet 1 Ders Notu
SQL’ e Giriş Uzm. Murat YAZICI.
VERİ ERİŞİM ARABİRİMİ PROGRAMLAMA DİLLERİ KENDİ OLANAKLARIYLAVERİTABANI ERİŞİMİNİ TAM ANLAMIYLA GERÇEKLEŞTİREMEZLER. BU NEDENLE VERİ ERİŞİM ARABİRİMİ (DATA.
Bilgisayar Mühendisliği Bölümü
PHP ve MYSQL.
İnsan Kaynakları Bilgi Sistemleri
GÜVENL İ K. Sunucu Seviyesinde Güvenlik Master Veritabanı (Kullanıcının gerekli yetkileri var mı?) Authentication Mod ◦ Windows Authentication Mod  Varsayılan.
CA VISUAL OBJECTS ORACLE, MS SQL & MY SQL BAĞLANTıSı Suat ÇELİK Mak. Yük. Müh İskenderrun, © Suat ÇELİK.
Yeni Veritabanı Oluşturma
Veri Tabanı Yönetimi Dersi 7. Laboratuvarı Arş. Gör. Pınar CİHAN.
S ORGU / DML / DDL KOMUTLARı İbrahim Onur Sığırcı.
 Stored Procedure kısaca SQL sorgularını isteğimize göre hazırlayıp kullanıma hazır veri tabanı nesnesine çeviren bir araçtır.  Stored Procedure, Türkçeye.
Asp.Net Veritabanı İşlemleri
Öğretim Görevlisi Alper Talha Karadeniz Veri Tabanı 2
Veri Tabanı Yönetimi Dersi 1. Laboratuvarı
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
VIEW lerle çalışmak 11.BÖLÜM.
TETİKLEYİCİLER ve HATA KONTROLÜ
C# WINDOWS UYGULAMASI HAZIRLAMA ADO.NET SUNU3- MÜŞTERİ KAYIT FORMU OLUŞTURMA SAVAŞ TUNÇER
VERİ TABANI SQL (STRUCTURED QUERY LANGUAGE) SAVAŞ TUNÇER.
VERİ TABANI VE VISUAL STUDIO SQL LOCAL DB(YEREL VERİ TABANINI SAYFAYA BAĞLAMA Savaş TUNÇER.
Asp.Net Veritabanı İşlemleri
Öğretim Görevlisi Alper Talha Karadeniz Veri Tabanı 1
C# ve Veri tabanı İşlemleri
Sorgu / dml / ddl komutları
SQL (STRUCTURED QUERY LANGUAGE)
SQL Server - Stored Procedures
PHP ve MYSQLi.
Sunum transkripti:

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.

PHP – MYSQL Komutları

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ı

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 = 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. }

Ç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: @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. 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 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)); }

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

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

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

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

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

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

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

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.

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

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

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

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

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

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.

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.

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

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

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

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.

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

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;