WEB PROGRAMLAMA II. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

Benzer belgeler
WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

Bölüm 10: PHP ile Veritabanı Uygulamaları

İnternet Programcılığı

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

Yaptığımız web sitelerinin daha kullanışlı olması için veritabanı sistemleri ile bağlantı kurup ihtiyaca göre verileri okuyup yazmasını isteriz.

Üst Düzey Programlama

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

Veri Tabanı-I 1.Hafta

Php İle Mysql Veritabanından Bilgi Çekme

2 Temel Kavramlar (Devam) Veritabanı 1

İNTERNET PROGRAMCILIĞI DERSİ

ADO.NET. Öğr. Gör. Emine TUNÇEL Kırklareli Üniversitesi Pınarhisar Meslek Yüksekokulu

Microsoft SQL Server 2008 Oracle Mysql (Ücretsiz) (Uygulamalarımızda bunu kullanacağız) Access

VERİ TABANI YÖNETİM SİSTEMLERİ

SQL veri tabalarına erişmek ve onları kullanmak için geliştirilmiş bir lisandır.

MOBİL UYGULAMA GELİŞTİRME

Swing ve JDBC ile Database Erişimi

1 Temel Kavramlar. Veritabanı 1

İngilizce'de Relational Database Management System (RDBMS) olarak ifade edilir.

Asp.Net Veritabanı İşlemleri

PostgreSQL ve PL/pgSQL

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

T.C. SAKARYA ÜNİVERSİTESİ ADAPAZARI MESLEK YÜKSEKOKULU WEB TABANLI VERİ TABANI UYGULAMASI YÖNLENDİRİLMİŞ ÇALIŞMA. Enes Al 1027.

Kepware Veritabanı Ürünleri. Teknolojiye Genel Bir Bakış

İNTERNET PROGRAMLAMA 2 A S P. N E T. Marmara Teknik Bilimler MYO / Hafta 5 Veri Tabanı İşlemleri

ELIF KIOTZEOGLOU RESUL MURAD MERT PACOLARI

İNTERNET PROGRAMCILIĞI HAFTA MYSQL - PHPMYADMIN. Hazırlayan Fatih BALAMAN. İçindekiler. Hedefler. Mysql Nedir.

PHP Günleri 2013#1. mysql_* Fonksiyonları Ömrünü Doldurmak Üzere. Peki Şimdi Ne Olacak? Özgür Yazılım A.Ş.

Veri Tabanı-I 1.Hafta

TESİ. indeks. söylenebilir?? bir ilişkidir d) Hiçbiri. veya somutlaştırılmış. düzeyidir? sağlayabilir? sına. d) Hepsi. olabilir? c) Verilerin d) Hepsi

Ç NDEK LER 1 PHP 6 1 PHP Nedir? 1 PHP nin Tarihi 2 PHP nin Avantajlar 4 PHP nin Dezavantajlar 4 PHP nin Çal flma Mant 6 PHP nin Çal flma Aral 8 PHP

PostgreSQL ve PL/pgSQL

ÖĞRENME-ÖĞRETME YÖNTEM VE TEKNİKLERİ. gösterip yaptırma, uygulamalı çalışma. Anlatım, soru-cevap, gösterip yaptırma, uygulamalı çalışma.

Ders Tanıtım Sunumu. Database Managegement II. Elbistan Meslek Yüksek Okulu Güz Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU

SAKLI YORDAM (Stored Procedure) Sibel Somyürek

İNTERNET PROGRAMCILIĞI DERSİ FİNAL NOTLARI

SQL e Giriş. Uzm. Murat YAZICI

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

VERİ TABANI YÖNETİM SİSTEMLERİ I

İlişkisel Veri Tabanları I

Veritabanı Uygulamaları Tasarımı

Veritabanına Giriş. Oğuzhan Ceylan. 19 Eylül 2011

CODEIGNITER SEMINERI KÜTÜPHANE YAZMA GÜVENLIK ÖNLEMLERI CODEIGNITER 2.0

Öğr. Gör. Serkan AKSU 1

ADO.NET VERİTABANINA BAĞLANTI. Bir web formu üzerinden veritabanına bağlantımızı anlatacağım. UYGULAMA 1

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

Microsoft SQL Server Sorgulama

PHP ye Giriş. Hidayet Doğan

C Sharp /Veri tabanı işlemleri

WEB PROGRAMLAMA II. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

Veritabanı Sızma Testleri Türk Standardları Enstitüsü Yazılım Test ve Belgelendirme Dairesi Başkanlığı

İnternet Programcılığı Öğr. Gör. Serkan AKSU PHP de Dizi-Değişkenler, Nesneler. Dizi Oluşturma. Tek Boyutlu Diziler

Php Programlama Dili MySQL Uygulamaları

BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ

Data Programming SQL Language. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

1.PROGRAMLAMAYA GİRİŞ

DML işlemleri. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı May Öğr. Gör. Murat KEÇECĠOĞLU

1 C#.NET GELİŞTİRME ORTAMI 1 Visual Studio 2015 Arayüzü 4 Menu Window 6 Solution Explorer 7 Properties Window 8 Server Explorer 8 Toolbox 9

1 APACHE SERVER KURULUMU 1 Kurulum 1 Apache Ayarları (httpd.conf) 6 PHP Ayarlaları (php.ini) 7 PHP5.4 Yükseltme 8 phpmyadmin Yükseltme 10

MySqlConnection connection; MySqlCommand command; MySqlDataReader reader; MySqlDataAdapter adapter; DataTable table;

Ders Tanıtım Sunumu. Database Managegement II. Elbistan Meslek Yüksek Okulu Güz Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU

VERĐTABANI YÖNETĐM SĐSTEMLERĐ

PHP'ye Giriş Türkiye PHP Grubu - Linux Şenlikleri PHP Eğitim / Tanıtım Seminerleri Ankara, 11 Mayıs 2006 Hidayet Doğan <hdogan@hido.

Veri Tabanı Yönetim Sistemleri Bölüm - 3

JDBC kütüphanesi, her görev için genellikle veritabanı kullanımı ile ilişkili API leri içerir:

Veritabanı İşlemleri

Ders Tanıtım Sunumu. Database Managegement II. Elbistan Meslek Yüksek Okulu Güz Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU

Veritabanı ve Yönetim Sistemleri

Yazılım Nedir? 2. Yazılımın Tarihçesi 3. Yazılım Grupları 4 Sistem Yazılımları 4 Kullanıcı Yazılımları 5. Yazılımın Önemi 6

PHP ile İnternet Programlama

Zope Uygulama Sunucusu

-- işareti tek satırlık açıklamalarda kullanılır. Açıklama olarak yazılan satırın önüne konulması yeterlidir.

İSTANBUL RUMELİ ÜNİVERSİTESİ MESLEK YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI 1.SINIF 2.YARIYIL İNTERNET PROGRAMCILIĞI II DERS İZLENCESİ

Veritabanı. Ders 2 VERİTABANI

Maltepe Üniversitesi Bilgisayar Mühendisliği Bölümü Veri Tabanı ve Yönetimi (BİL 301)

Geliştirici Referans Kılavuzu

SQL Query and Table Application

ÜNİTE NESNE TABANLI PROGRAMLAMA I. Uzm. Orhan ÇELİKER VERİTABANI SORGULARI İÇİNDEKİLER HEDEFLER

13 Mayıs İlgili Versiyon/lar : ETA:SQL, ETA:V.8-SQL. İlgili Modül/ler : Genel

Veritabanı Tasarımı. Sütun Değerlerini Güncelleme ve Satırları Silme

Programa giriş MSSQL versiyonuna göre iki ayrı şekilde yapılmaktadır.

1 JAVASCRIPT NEDİR? 1

Veritabanı Yönetimi Bilgisayarların. Keşfi Hedefler. Veritabanı, Veri ve Bilgi. Veritabanı, Veri ve Bilgi. Veritabanı, Veri ve Bilgi

Kurulum 14 FTP ye Bağlanmak ve Dosyaları Atmak 14 Veritabanı Oluşturulması ve Bağlanıp Kurulumun Tamamlanması 15

BAY.t Entegre. Aşağıdaki script fiyat gör programının ayarlar sayfasındaki sorgu cümlesi alanına yapıştırılıp Sorguyu Db ye Yükle tıklanır

BLGM 354 DENEY 1 * GİRİŞ

Veritabanı Dersi. Teoriden Pratiğe. Çağıltay N.E., Tokdemir G. Veritabanı Sistemleri Dersi -Bölüm XXV: Web'den Erişim Çağıltay, N., Tokdemir, G.

BİL-142 Bilgisayar Programlama II

BÖLÜM -6: VERİLERİ DEĞİŞTİRMEK

Veritabanı Yönetim Sistemleri (Veritabanı Kavramı) Veritabanı Sistemleri

MICROSOFT ACCESS DERS NOTLARI

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

=A1+A2-A3, =A1*A2/A3,

Veritabanı Tasarımı. Veritabanı Hareketleri

Oracle da kullanılan veri tipleri:

Yukarıdaki örnekte görüldüğü üzere her php komut satırı noktalı virgül (;) ile biter.

VERİ TABANI UYGULAMALARI

Web Uygulama Güvenliği Kontrol Listesi 2010

Transkript:

WEB PROGRAMLAMA II Öğr. Gör. M. Mutlu YAPICI Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

Ders İzlencesi Hafta Modüller/İçerik/Konular 1. Hafta Oturum yönetimi 2. Hafta Cookies kullanımı ve oturum yönetimi 3. Hafta Session kullanımı ve oturum yönetimi 4. Hafta Sayfalama ve Arama İşlemleri 5. Hafta JavaScript, JQuery ve PHP 6. Hafta AJAX ve PHP 7. Hafta AJAX ve PHP 8. Hafta ARA SINAV 9. Hafta PHP de Nesne Yönelimli Programlamaya Giriş(347) 10. Hafta PHP de PDO 11. Hafta 12. Hafta 13. Hafta 14. Hafta Öğr. Gör. M. Mutlu YAPICI

Bu Ünitede Ele Alınan Konular PDO Nedir? Neden PDO? PHP Data Objects PDO ile Veritabanı Bağlantısı PDO Fonksiyonları PDO Temel Veritabanı İşlemleri Öğr. Gör. M. Mutlu YAPICI

PHP veri nesneleri (PDO), PHP de veri tabanı işlemlerini daha kolay ve esnek bir halde uygulamak için geliştirilmiştir. Kullanım yapısı daha önce gördüğümüz MYSQLI sınıf yapısına benzemektedir. MYSQLI ye göre daha esnek ve daha kullanışlı olduğu görülmektedir. Ayrıca en önemli farklarından biri de birden fazla veritabanına entegre olabilme imkanı sunmasıdır. Yani sadece DSN parametresinin değerini ayarlayarak tüm kodlarınızı bir anda farklı bir veritabanına uygun hale getirebiliyorsunuz. Bu gerçekten güzel ve esnek bir özellikle PostgreSQL, MySQL, ORACLE, SQLite gibi veritabanlarına kolayca entegre edile bilmektedir.

PDO(PHP Data Objects / PHP Veri Objeleri) özetle; hafif ve tutarlı bir şekilde veritabanına erişimi sağlayan bir arayüz. Adından da anlayacağınız üzerie Object Oriented Programming arayüzüne sahip, onlarca veritabanı sürücüsü destekliyor; PDO nun desteklediği diğer veritabanları ; Cubrid FreeTDS / Microsoft SQL Server / Sybase Firebird/Interbase 6 IBM DB2 IBM Informix Dynamic Server MySQL 3.x/4.x/5.x Oracle Call Interface ODBC v3 (IBM DB2, unixodbc and win32 ODBC) PostgreSQL SQLite 3 and SQLite 2 Microsoft SQL Server / SQL Azure Bunların haricinde PDO 5.1 den itibaren geliyor, yani çalışabilmesi için güncel versiyonlara ihtiyacınız olacak.

PDO yu kullanabilmek için öncelikle PHP sunucunuzdaki PDO eklentilerini aktif etmeniz gerekmektedir. Bunun için sunucunuzdaki php.ini dosyasından extension=php_pdo.dll gibi PDO eklentilerinin önündeki ;(noktalı virgül) leri silmelisiniz. Daha sonra sunucunuzu yeniden başlatarak PDO fonksiyonlarını kullanmaya başlayabilirsiniz. Sisteminizde açık ve kullanılabilir PDO veritabanı sürücülerini görmek için aşağıdaki fonksiyonu kullanabilirsiniz. Böylece sunucunuzda PDO tarafından desteklenen veritabanlarını öğrenebilirsiniz. <?php?> print_r(pdo:: getavailabledrivers());

PDO ile veritabanı bağlantısını gerçekleştirebilmek için öncelikle PDO sınıfından bir nesne üretmeniz gerekmektedir. PDO sınıfının kurucu metodu bizden veritabanı türü, headerlar, veritabanı kullanıcı bilgileri ve adı gibi bazı parametreleri istemektedir. Sınıfın kullanım şekli aşağıdaki gibidir. PDO( string $dsn [, string $kullanıcı [, string $parola [, array $seçenekler ]]] ) dsn değiştirgesi, bir veritabanı bağlantısı oluşturmak için kullanılır ve veritabanına göre yazım dizgesi değişmektedir. Üç farklı parametreyi ister bunlar : $dsn = 'mysql:host=localhost;port=3307;dbname=ders'; Diğer parametreler ise kullanıcı adı ve şifresidir. Aşağıda örnek bir MYSQL bağlantısı vardır. <?php $vt = new PDO('mysql:host=localhost;port=3307;dbname=ders','root','usbw');?> Öğr. Gör. M. Mutlu YAPICI Bu bağlantıda eğer bir hata olursa direkt ekrana yazar hata kontrolü yapmak istiyorsak TRY -CATCH bloklarını kullanmak zorundayız.

<?php Öğr. Gör. M. Mutlu YAPICI try{ $vt = @new PDO('mysql:host=localhost;port=3307;dbname=ders','root','usbw'); }catch (PDOException $e){ echo "PDO Bağlantı Hatası ".$e->getmessage(); }?> Bu şekilde meydana gelen hatalar kontrollü bir şekilde ekrana bastırılmış olmaktadır.

PDO ile veritabanı bağlantısında sadece ilk parametre olan mysql:host=localhost;port=3307;dbname=ders parametresi değişmektedir. Örnek olarak yazım şekli olarak farklı veritabanları için; # MS SQL Server and Sybase with PDO_DBLIB $DBH = new PDO("mssql:host=$host;dbname=$dbname, $user, $pass"); $DBH = new PDO("sybase:host=$host;dbname=$dbname, $user, $pass"); # MySQL with PDO_MYSQL $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); # SQLite Database $DBH = new PDO("sqlite:my/database/path/database.db");

Daha düzenli bir PDO ile veritabanı bağlantısı için PDO içerisindeki parametreleri başlangıçta değişken olarak tanımlamak daha mantıklıdır. Bu formata uygun şekilde aşağıdaki gibi olmalıdır. <?php?> $dsn = 'mysql:host=localhost;port=3307;dbname=ders ; $user = 'root'; $sifre = 'usbw'; try{ $vt = @new PDO($dsn, $user, $sifre); }catch (PDOException $e){ } echo "PDO Bağlantı Hatası ".$e->getmessage(); Öğr. Gör. M. Mutlu YAPICI

PDO ile veritabanı bağlantısını açtıktan sonra işimiz bittiğinde veritabanı bağlantısını kapatmak için sadece nesne değerine NULL yüklememiz yeterli olacaktır.. <?php?> $dsn = 'mysql:host=localhost;port=3307;dbname=ders ; $user = 'root'; $sifre = 'usbw'; try{ $vt = @new PDO($dsn, $user, $sifre); }catch (PDOException $e){ } $vt= NULL; echo "PDO Bağlantı Hatası ".$e->getmessage(); Öğr. Gör. M. Mutlu YAPICI

PDO da SQL sorgularını çalıştırmak için exec() metodunu kullanmaktayız. Veritabanına her hangi bir veriyi eklemek için bir sonraki sayfada bulunan kodu kullanmalıyız. Kodu inceleyecek olursak veritabnına bağlandıktan sonra SQL sorgusunu exec() metodu ile çalıştırdığımız görülmektedir. Bu metod ile bir SQL sorgusu çalıştırdığımızda bize eğer sorgu başarısız ise FALSE değeri döner başarılı ise işlemden etkilenen toplam satır sayısını döndürür.

PDO ile veri ekleme; <?php $dsn = 'mysql:host=localhost;port=3307;dbname=ders ; $user = 'root'; $sifre = 'usbw';?> Öğr. Gör. M. Mutlu YAPICI try{ $vt = @new PDO($dsn, $user, $sifre); echo "PDO Bağlantısı Başarılı"; $sonuc=$vt->exec("insert INTO `bolum` (`adi`,`adres`) VALUES('Büro Yönetimi','Elmadağ')"); if($sonuc===false) echo "<br>pdo Sorgu Hatası"; else echo "<br>sorgu Başarılı Eklenen Satır Sayısı =".$sonuc; }catch (PDOException $e){ echo "PDO Bağlantı Hatası ".$e->getmessage(); } $vt= NULL;

PDO ile veri ekleme sonuç;

PDO ile veri ekleme sonucunu incelediğimizde eklediğimiz satırda ğ gibi Türkçe karakterlerin bozuk olduğunu görebiliriz. Bunu önleyebilmek için Karakter kümesini UTF8 olarak ayarlamalıyız. Bunu yine Exec(); metodu ile yapacağız; Exec( SET NAMES UTF8 ); Bu şekilde Türkçe karakter sorununu da çözebiliriz.

PDO ile veri ekleme; Karakter sorununu çözdük. <?php?> $dsn = 'mysql:host=localhost;port=3307;dbname=ders ; $user = 'root'; try{ $sifre = 'usbw'; $vt = @new PDO($dsn, $user, $sifre); $vt->exec("set NAMES UTF8"); echo "PDO Bağlantısı Başarılı"; $sonuc=$vt->exec("insert INTO `bolum` (`adi`,`adres`) VALUES('Büro Yönetimi','Elmadağ')"); if($sonuc===false) echo "<br>pdo Sorgu Hatası"; else }catch (PDOException $e){ $vt= NULL; echo "<br>sorgu Başarılı Eklenen Satır Sayısı =".$sonuc; echo "PDO Bağlantı Hatası ".$e->getmessage(); } Öğr. Gör. M. Mutlu YAPICI

PDO ile veri ekleme sonuç; Türkçe Karakter Sorunu Yok

PDO ile veri eklerken enson eklediğiniz satıra ait verinin id nosunu alabilirsiniz bunun için, $vt->lastinsertedid(); kodu kullanılır.

PDO ile veri çekmek ve listelemek için iki farklı yol vardır birincisi query() metodu ikincisi MYSQLIde de gördüğümüz PREPARE() ve bindparam() metodlarıdır. QUERY() metodu iki parametre alır, birincisi sorgunun kendisi ikincisi ise dönen sonuçların diziye nasıl yükleneceğidir. Diziye yüklerken FETCH() metoduna göre modunu belirtiriz. PDO::FETCH_ASSOC, PDO::FETCH_NUM, PDO::FETCH_BOTH, PDO::FETCH_OBJ gibi değerler almaktadır gelen sonuçlar bu değerlere göre diziye yüklenir.

PDO ile veri ekleme; Karakter sorununu çözdük. <?php?> $dsn = 'mysql:host=localhost;port=3307;dbname=ders ; $user = 'root'; try{ $sifre = 'usbw'; $vt = @new PDO($dsn, $user, $sifre); $vt->exec("set NAMES UTF8"); echo "PDO Bağlantısı Başarılı"; $sonuc=$vt->query("select * FROM `bolum`",pdo::fetch_assoc); if($sonuc===false) else }catch (PDOException $e){ $vt= NULL; echo "<br>pdo Sorgu Hatası"; foreach( $sonuc as $veri) echo"<br>".$veri['adi']; echo "PDO Bağlantı Hatası ".$e->getmessage(); } Öğr. Gör. M. Mutlu YAPICI

PDO ile veri ekleme; Karakter sorununu çözdük. <?php?> $dsn = 'mysql:host=localhost;port=3307;dbname=ders ; $user = 'root'; try{ $sifre = 'usbw'; $vt = @new PDO($dsn, $user, $sifre); $vt->exec("set NAMES UTF8"); echo "PDO Bağlantısı Başarılı"; $sonuc=$vt->query("select * FROM `bolum`",pdo::fetch_num); if($sonuc===false) else }catch (PDOException $e){ $vt= NULL; echo "<br>pdo Sorgu Hatası"; foreach( $sonuc as $veri) echo"<br>".$veri[1]; echo "PDO Bağlantı Hatası ".$e->getmessage(); } Öğr. Gör. M. Mutlu YAPICI

QUERY() metodu dışarıdan gelen verilere karşı savunmasızdır yani SQLINJECTION gibi saldırılara duyarlı değildir bunun için dışarıdan gelen verileri kontrol etmemiz gerekir. Dışarıdan gelen verileri QUOTE() metodu ile kontrol etmeliyiz. Kullanım şekli $veri = $vt-> QUOTE($veri); şeklindedir. GET veya POST ile gelen bir veriyi $_GET[ adi ] = $vt->quote($_get[ adi ] ); Şeklinde kontrol edebiliriz. Tabi bu şekilde tek tek tüm verileri kontrol etmek zor olduğu için istersek daha önce öğrendiğimiz array_map() metodu ile bir kerede kontrol sağlayabiliriz. $_POST = array_map(array($vt, quote ),$_POST);

QUERY() metodu dışarıdan gelen verilere karşı savunmasız olduğu için daha çok prepare ve bindparam metodları kullanılmaktadır. Prepare metodu sorguyu bir kez inceler ve hataları zararlı kodları düzenler ve birden çok kez çalıştırmaya olanak sağalar Bu nedenle daha hızlı çalışan bir koddur. Kullanım şekli ise daha önce gördüğümüz MYSQLI ile aynıdır.

PDO ile veri ekleme; Karakter sorununu çözdük. <?php $dsn = 'mysql:host=localhost;port=3307;dbname=ders ; $user = 'root'; $sifre = 'usbw'; try{ $vt = @new PDO($dsn, $user, $sifre); $vt->exec("set NAMES UTF8"); echo "PDO Bağlantısı Başarılı"; $ad=$_get['ad']; $sonuç = $vt->prepare("select * FROM `ogrenci` WHERE `adi`=?"); $sonuc->bindparam(1,$ad,pdo::param_str); $sonuc->execute(); if($sonuc===false) echo "<br>pdo Sorgu Hatası"; else while( $veri=$sonuc->fetch(pdo::fetch_assoc) ) echo"<br>".$veri['adi']; Öğr. Gör. M. Mutlu YAPICI?> }catch (PDOException $e){ echo "PDO Bağlantı Hatası ".$e->getmessage(); } $vt= NULL;

bindparam metodu ile birden fazla veri bağlanacaksa tek tek yazmalıyız. $sonuc=$vt->prepare("select * FROM `ogrenci` WHERE `adi`=? AND `no`=?"); $sonuc->bindparam(1,$ad,pdo::param_str); $sonuc->bindparam(2,$no,pdo::param_int);

bindparam metodu ile değişkenleri bağlarken istersen? Yerine değişken adı da kullanabiliriz. $sonuc=$vt->prepare("select * FROM `ogrenci` WHERE `adi`=:ad AND `no`=:no"); $sonuc->bindparam( :ad,$ad,pdo::param_str); $sonuc->bindparam( :no,$no,pdo::param_int);

Verileri sorguya bağlama işlemini bindparam metodu ile yapabildiğimiz gibi istersek sadece execute() metodu ile de yapabiliriz. Kullanım şekli aynı bindparam da olduğu gibidir. Sadece bu kez parametreleri bindparam içine değil execute içerisine yazıyoruz. Ama tekbir farkla değerleri dizi halinde gönderiyoruz. $sonuc=$vt->prepare("select * FROM `ogrenci` WHERE `adi`= :ad AND `no`=:no"); $sonuc->execute(array( :ad =>$ad, :no =>$no)); Soru işareti olduğunda ise ; $sonuc=$vt->prepare("select * FROM `ogrenci` WHERE `adi`=? AND `no`=?"); $sonuc->execute(array($ad, $no));

PDO ile Güncelleme işlemleri daha önce ekleme işlemlerinde olduğu gibi EXEC() metodu ile yapılabilir ancak daha önce de söylediğimiz gibi bu metod dışarıdan gelen SQL saldırılarına açıktır. Bu sebeple prepare ve bindparam ile kullanılması daha mantıklıdır. Yada EXECUTE ile yapılır. Bir sonraki sayfada execute metodu ile yapılmış bir güncelleme örneği bulunmaktadır. Aynı örneği iki sonraki sayfada prepare ve bindparam ile de yaptık.

<?php try{ $vt=new PDO('mysql:host=localhost;port=3307;dbname=UEOkul','root','usbw'); $vt->exec("set NAMES UTF8"); Öğr. Gör. M. Mutlu YAPICI $ad=$_get['ad']; $bl=$_get['bol']; $cns=$_get['cns']; $tc=$_get['tc']; $sonuc=$vt->prepare("update `ogrenci` SET `adi`=?, `bolum`=?,`cins`=? WHERE `tcno`=?"); $sonuc->execute(array($ad,$bl,$cns,$tc)); if($sonuc===false) echo"<br>pdo Sorgu Hatası"; else{ echo $sonuc->rowcount()." Satır veri güncellendi"; } }catch(pdoexception $e) { echo $e->getmessage(); }?>

<?php try{ $vt=new PDO('mysql:host=localhost;port=3307;dbname=UEOkul','root','usbw'); $vt->exec("set NAMES UTF8"); $ad=$_get['ad']; $bl=$_get['bol']; $cns=$_get['cns']; $tc=$_get['tc']; $sonuc=$vt->prepare("update `ogrenci` SET `adi`=:adi, `bolum`=:bo,`cins`=:cn WHERE `tcno`=:tcm"); $sonuc->bindparam(':adi',$ad,pdo::param_str); $sonuc->bindparam(':bo',$bl,pdo::param_str); $sonuc->bindparam(':cn',$cns,pdo::param_str); $sonuc->bindparam(':tcm',$tc,pdo::param_int); $sonuc->execute(); if($sonuc===false) echo"<br>pdo Sorgu Hatası"; else{ echo $sonuc->rowcount()." Satır veri güncellendi"; } }catch(pdoexception $e) { echo $e->getmessage(); }?>

PDO ile veri Silme işlemleri de aynı güncelleme işlemlerinde olduğu gibi EXEC() metodu ile yapılabilir ancak daha önce de söylediğimiz gibi bu metod dışarıdan gelen SQL saldırılarına açıktır. Bu sebeple prepare ve bindparam ile kullanılması daha mantıklıdır. Yada EXECUTE ile yapılır. Bir sonraki sayfada execute metodu ile yapılmış bir veri silme örneği bulunmaktadır. Aynı örneği iki sonraki sayfada prepare ve bindparam ile de yaptık.

<?php try{ $vt=new PDO('mysql:host=localhost;port=3307;dbname=UEOkul','root','usbw'); $vt->exec("set NAMES UTF8"); Öğr. Gör. M. Mutlu YAPICI $tc=$_get['tc']; $sonuc=$vt->prepare("delete FROM `ogrenci` WHERE `tcno`=?"); $sonuc->execute(array($tc)); if($sonuc===false) echo"<br>pdo Sorgu Hatası"; else{ echo $sonuc->rowcount()." Satır veri Silindi"; } }catch(pdoexception $e) { echo $e->getmessage(); }?>

<?php try{ $vt=new PDO('mysql:host=localhost;port=3307;dbname=UEOkul','root','usbw'); $vt->exec("set NAMES UTF8"); Öğr. Gör. M. Mutlu YAPICI $tc=$_get['tc']; $sonuc=$vt->prepare("delete FROM `ogrenci` WHERE `tcno`=:tcm"); $sonuc->bindparam(':tcm',$tc,pdo::param_int); $sonuc->execute(); if($sonuc===false) echo"<br>pdo Sorgu Hatası"; else{ echo $sonuc->rowcount()." Satır veri silindi"; } }catch(pdoexception $e) { echo $e->getmessage(); }?>

PDO ile veri Silme işlemlerini daha güvenli şekilde yapabiliyoruz. Örneğin bir silme işlemi belirli veriler silindikten sonra yarıda hata meydana gelirse geri alınabiliyor. Bu şekilde veri kayıplarının önüne geçilerek daha güvenli bir işlem meydana getiriliyor. İşlemlerin geri alına bilinmesi için sınıfın begintransaction() metodu kullanılmaktadır. Bu metod verilerin işleneceği bir güvenli başlangıç noktası oluşturur. Böylece işlemler geri alınmak istendiğinde bu başlangıç noktasından sonraki yapılan işlemler geri alınır. Verileri geri alma işlemini bu sınıftaki rollback() metodu yapar, commit() metodu ise sorunsuz çalışan işlemler silsilesinden sonra işlemleri kalıcı hale getirir. Commit() metodundan sonra işlemler geri alınamaz

<?php try{ $vt=new PDO('mysql:host=localhost;port=3307;dbname=UEOkul','root','usbw'); $vt->exec("set NAMES UTF8"); $tc=$_get['tc']; $tc1=$_get['tc1']; $vt->begintransaction(); //İşlemi geri almak için Transaction başlatalım $sonuc=$vt->prepare("delete FROM `ogrenci` WHERE `tcno`=:tcm"); $sonuc->bindparam(':tcm',$tc,pdo::param_int); $sonuc->execute(); $sonuc=$vt->prepare("delete FROM `ogrenci` WHERE `tcno`=:tcm"); $sonuc->bindparam(':tcm',$tc1,pdo::param_int); $sonuc->execute(); if($sonuc==false){ echo"<br>pdo Sorgu Hatası işlemi geri alalım"; $vt->rollback();//işlemi geri alalım }else{ echo $sonuc->rowcount()." Satır veri güncellendi"; if($sonuc->rowcount()<=0){ $vt->rollback();//işlemi geri alalım echo"<br>işlemi geri alalm"; }else $vt->commit();//işlemi tamamla }catch(pdoexception $e){ echo $e->getmessage(); }?>

KAYNAKLAR İnternet ortamı PHP ve AJAX Haydar TUNA A dan Z ye PHP Rıza ÇELİK