PHP ile MySQL veritabanına PDO tekniği ile Bağlanma -1
Bu makalemizde PHP ile MySQL arasındaki bağlantı PDO tekniği ile yapılacaktır. Klasik PHP-MySQL bağlantısını PHP Sunum dosyasında bulabilirsiniz. MySQL'den başka PDO kütüphanesinde birçok veritabanına bağlantı yapmak mümkündür. PostgreSQL, IBM DB2, Oracle, SQL Server, Access, SQL Lite, SYBASE, Informix gibi veritabanlarına da bağlantı yapabilirsiniz.
Neden PDO'ya geçmeliyim, diye sorabilirsiniz. Cevap olarak, Güvenlik ve Hızlılık cevabını verebiliriz. Ayrıca PDO tüm veritabanlarını desteklemektedir, böylece bir veritabanı ile çalışmayı bırakıp, başka bir veritabanına geçmek istediğiniz sadece ilgili Class(Sınıf) dosyalarında ufak tefek SQL değişiklikleri yaparak geçiş yapabilirsiniz. Diğer tekniklerde kodların neredeyse tamamında değişiklik yapmak zorunda kalabilirsiniz. En azından fonksiyon kullanmışsanız işiniz biraz rahat olur ama hiç fonksiyon dahi kullanmamışsanız neredeyse tüm php dosyalarının içini teker teker açıp değiştirmek tamamen cefa halini alacaktır.
Artık php.net tarafından da eski nesil mysql fonksiyonları yerine PDO ile bağlantı önerilmektedir. Bu makalede, PDO bağlantısını Class haline getirilere daha modüler kod yazma sağlanmıştır. PHP ile MySQL veritabanına Kayıt EKLEME, Kayıt SİLME, Kayıt GÜNCELLEME, Toplu Kayıt SEÇME ve Tek Kayıt SEÇME işlemleri yapılabilmektedir.
class veriTabani{
private $host = DB_HOST; //Bağlanılacak Sunucu IP veya Adresi
private $user = DB_USER; //Kullanıcı adı, lokaldeyse root
private $pass = DB_PASS; //Şifre, lokaldeyse boşluk
private $dbname= DB_NAME; // MySQL veritabanı adı
private $dbh;
private $error;
private $stmt;
//Bu sınıftan nesne üretildiğinde çalışacak yapıcı (Contructor) fonksiyon
function __construct()
function __construct()
{
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname.";";
//PDO parametreleri
$options = array(
PDO::ATTR_PERSISTENT => false, //true iken Mysql has gone away hatası alınıyor
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
//Hata mesajlari vermemesi icin exception yerine Silent moda geçilmelidir.
//PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT
);
// PDO Ornegi olusturma
try{
$this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
$this->dbh->exec("SET CHARACTER SET utf8");
}
catch(PDOException $e){
$this->error = "Baglanti Hatasi:".$e->getMessage();
}
}
// Sorgula metodu(fonksiyonu) gönderilen SQL sorgusunu hazırlar
// Sorgula metodu(fonksiyonu) gönderilen SQL sorgusunu hazırlar
public function sorgula($sql){
$this->stmt = $this->dbh->prepare($sql);
}
//Çalıştır metodu ise hazırlanan sorguyu çalıştırır.
public function calistir($parametre=null){
return $this->stmt->execute($parametre);
}
//tekKayitAl metodu verilen tablo adından istenen alana(kolona) göre verilen değeri sorgular.
public function tekKayitAl($tablo, $alan,$deger )
{
$sql = "SELECT * FROM ".$tablo." WHERE ".$alan." = ?";
$this->sorgula($sql);
$this->calistir(array($deger));
return $this->stmt->fetch(PDO::FETCH_ASSOC);
}
//Veritabanında tek kayıt çeker
public function tekCek(){
$this->calistir();
return $this->stmt->fetch(PDO::FETCH_ASSOC );
}
//Veritabanındaki birden fazla satır çeker
public function tamCek(){
$this->calistir();
return $this->stmt->fetchAll(PDO::FETCH_BOTH );
}
//İşlemler yapıldıktan sonra bağlatı için gereklidir.
public function bind($parametre, $deger, $tip = null){
if (is_null($tip)) {
switch (true) {
case is_int($deger):
$tip = PDO::PARAM_INT;
break;
case is_bool($deger):
$tip = PDO::PARAM_BOOL;
break;
case is_null($deger):
$tip = PDO::PARAM_NULL;
break;
default:
$tip = PDO::PARAM_STR;
}
}
$this->stmt->bindValue($parametre, $deger, $tip);
}
//Verilen tablo ismine ve alanlara göre tüm kayıtları çeker
public function tumKayitAl($tablo, $alan=null, $deger=null)
{
if ($alan!= null && $deger !=null)
$sql = "SELECT * FROM ".$tablo." WHERE ".$alan."=".$deger;
else
$sql = "SELECT * FROM ".$tablo;
//try{
$this->sorgula($sql);
$this->calistir();
return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
//} catch (Exception $e) {
// die("tumKayitAl() fonksiyonunda sorgu hatası");
//}
}
//Kayıt Ekleme(INSERT) yapan fonksiyon, tablo ismi alır, dizi şekilde alanlar ve değerler alınır.
public function kayitEkle($tablo, $alanlar=array(), $degerler = array())
{
$sql1= implode(',', $alanlar);
$sql2= implode(',', array_fill(0, count($degerler), '?'));
$sql = 'INSERT INTO '.$tablo;
$sql .= '('.$sql1.') ';
$sql .= 'VALUES ('.$sql2.')';
try{
$this->sorgula($sql);
$this->calistir(array_values($degerler));
return $this->sonEklenenID();
}catch (Exception $e) {
die("kayitEkle() fonksiyonunda sorgu hatası");
return 0;
}
}
//Kayıt Güncelleme (UPDATE) yapar, dizi şeklinde güncellenecek alan ve değerleri alınır
// $sorgu_alan parametresi ile WHERE şartı yazılır
//Kayıt Güncelleme (UPDATE) yapar, dizi şeklinde güncellenecek alan ve değerleri alınır
// $sorgu_alan parametresi ile WHERE şartı yazılır
public function kayitGuncelle($tablo, $alanlar=array(), $degerler = array(), $sorgu_alan=NULL, $sorgu_deger=NULL)
{
$set = '';
for($i=0; $i<count($alanlar);$i++)
{
$set .= "`$alanlar[$i]` = ?";
if ($i!=count($alanlar)-1) $set.=",";
}
if ($sorgu_alan!=NULL && $sorgu_deger!=NULL)
$sql = "UPDATE $tablo SET ".$set." WHERE $sorgu_alan=?";
else
$sql = "UPDATE $tablo SET ".$set;
//echo $sql;
try{
$this->sorgula($sql);
if ($sorgu_alan!=NULL) {
$degerler[] = $sorgu_deger;
$this->calistir($degerler);
}
else $this->calistir($degerler);
return 1;
} catch (Exception $e) {
die("kayitGuncelle() fonksiyonunda sorgu hatasi.");
return 0;
}
}
//Verilen tablodan $alan isimli değişkene $deger parametresiyle gönderilen değeri siler.
public function tekKayitSil($tablo, $alan, $deger)
{
$sql = "DELETE FROM ".$tablo." WHERE ".$alan." = ?";
try{
$this->sorgula($sql);
$this->calistir(array($deger));
return 1;
} catch(Exception $e){
die("tekKayitSil() fonksiyonunda sorgu hatası");
return 0;
}
}
//İşlem sonucunda etkilenen kayıt sayısı alınır
public function satirSay(){
return $this->stmt->rowCount();
}
//Veritabnına ekleme yapıldığında veritabanı tarafından verilen son ID değerini döndürür.
public function sonEklenenID(){
return $this->dbh->lastInsertId();
}
//TRANSACTION işlemini başlatır. Eğer birden fazla (toplu) sorgu çalıştıracaksanız
//ve bu sorguların hep beraber işletilmesi gerekiyorsa transaction kullanırsınız.
public function islemeBasla(){
return $this->dbh->beginTransaction();
}
// Transaction işlemini onaylar(commit) eder.
public function islemiBitir(){
return $this->dbh->commit();
}
//Sorgulardan birinde hata alınan transaction işlemini sonlandırır.
public function islemIptal(){
return $this->dbh->rollBack();
}
public function parametreGoster(){
return $this->stmt->debugDumpParams();
}
} //class
Oğuzhan TAŞ - 2014
Oğuzhan TAŞ - 2014
İlerleyen derslerde bu PDO kütüphanesinin kullanımı ile ilgili bol örnek yapacağız. MySQL dışında başka veritabanlarına da bağlanacağız. MySQL artık ORACLE firmasının oldu, ne olur ne olmaz, yarın MySQL ücretli olursa en iyi alternatiflerden biri PostgreSQL veritabanıdır. SQLLite ise bugün tüm Android ve IOS(Ipad, Iphone) işletim sistemlerinde bile rahatlıkla çalışan hafif bir veritabanıdır. Bu iki veritabanına da yeri geldikçe değineceğiz ve örneklerimizde kullanacağız.
KAYNAKLAR
* Neden PDO Nesneleri kullanmalısınız?
http://php.net/manual/tr/migration55.deprecated.php
- PHP.Net PDO Kütüphanesi
http://php.net/manual/tr/book.pdo.php
Dil Değiştir(Change Language)
Kategoriler
- Csharp(58)
- Csharp Formlar(23)
- Web Tasarım(9)
- CSS(27)
- JavaScript(37)
- PHP(50)
- Laravel(3)
- ASP.net(38)
- Excel(15)
- Güvenlik(4)
- E-Ticaret(3)
- Kariyer(5)
- SQL Server(29)
- MySQL(16)
- Linux(17)
- MacOSX(8)
- Ayarlar(12)
- Bilgisayar Ağları(3)
- Symfony(1)
- Teknoloji(7)
- VBS(1)
- Arduino(6)
- RaspberryPi(1)
- Algoritmalar(15)
- HTML(3)
- Python(2)
- Bash Script(7)
- C Programlama(10)
- Flutter - Dart(11)
- Bootstrap(1)
En çok Okunan 18 Makale
- :: Excelde EĞER Fonksiyonu Kullanımı...
- :: Csharp ile Access Veritabanı Bağlan...
- :: SQL nedir, Temel SQL Komutları nele...
- :: Hangi Linux Dağıtımı?
- :: OSX İşletim Sistemine PHP, MySQL, A...
- :: PHP dilini kullanarak MySQLi tekniğ...
- :: Excel Hesap tablosunda EĞERSAY Fonk...
- :: Excel Hesap tablosunda ÇOKETOPLA Fo...
- :: Excel Hesap tablosunda ETOPLA Fonks...
- :: Excel Hesap tablosunda ÇOKEĞERSAY F...
- :: Hangi Programlama Dilini Öğrenmeliy...
- :: Mac Bilgisayarınıza Windows 7 Yükle...
- :: PHP ile Basit Dosya Yükleme
- :: C# Programlama Dili ile İlgili Örne...
- :: PHP Dili kullanarak MySQLi Tekniği ...
- :: Excel hücrelerinde yıldız koyarak b...
- :: PhpMyAdmin Şifresi Nasıl Değiştiril...
- :: Hangisi acaba, PHP mi ASP.NET mi ?