PDO vs Mysqli

PDO VS Mysqli

Merhabalar,

Bildiğiniz gibi SQL Injection açıkları yüzünden PHP’nin değişik mysql bağlantı fonksiyonlarını kullanmaya başlamamız gerek.

Bunun sebebi dengesizin biri gelip e-yurtseven.net/sil.php?get=DELETE from users diyerek üyelerimizi silmesini engellemek tabi bunun daha farklı yolları var php’de fakat PDO ve Mysqli kesin çözüm sunduğu ve kullanımı basit olduğu için öneriliyor. Hadi bakalım

PDO ve Mysqli arasında sistemsel bir fark var mı?

Aslına bakarsanız arasında çokta büyük fark yok amacımız SQL Injection denen illetten kurtulmak bize ikiside aynı işlemi yapıyor. Fakat şöyle bir ayrım yapabiliriz eğer siz nesne yönelimli yazıyorsanız PDO daha mantıklı. Nedeni ise PDO sınıfını çağırıyorsunuz connect.class.php olarak kaydedersiniz ve tekrar constructor ile kurucu fonksiyona atayabilirsiniz. Fakat normal PHP 4 ile kodlama yapıyorsanız ve mysql_ fonksiyonlarına alışkınsanız mysqli_ fonksiyonlarının neredeyse bir farkı yok yani sadece mysql -> mysqli oluyor diyebilirim.

Peki neden mysql_ fonksiyonlarından buna geçmelisiniz?

PHP geliştiricilerinin açıkladığı notlarda mysql_ fonksiyonlarının desteklenmeyeceği duyuruldu. Bunun sebebi de güvenlik olduğu için ileriki PHP sürümde hata gözükecekmiş. Onlarca kişinin kullandığı mysql bi anda desteklenmezse ne olur acaba? Bu biraz uzun vadeli bir soru gibi gözüksede o gün de gelicek ve PHP Mysql desteğini tamamen kaldırdı adı altında yazımı yazmış olucam.

PDO vs Mysqli

PDO ve Mysql arasındaki farklar neymiş bir bakalım.

PDO 12 adet veritabanına bağlanabilme yeteneğine sahip fakat PDO’yu sadece OOP yapısıyla kullanabilirsiniz.

Mysqli ise hem OOP hemde procedural sistemlerde kullanılabiliyor.

PDO ile isimli parametre atayabilirsiniz.

Şimdi bakalım yazım olarak ne farklılıklar var?

## Connect ##

	// PDO
	try
	{
		## Connected ##
		$db = new PDO( 'mysql:host=localhost;dbName=test' , $user, $pass);
	}
	catch(PDOException  $e)
	{
		print $e->getMessage(); ## Bağlanmadı hatasını yazdırdık.
	}
	
	// Mysqli OOP
	$cnnx = new mysqli("host","user","pass","dataBaseName"); 
	
        // Mysqli PHP4(procedural)
	$cnn = mysqli_connect("host", "user", "pass", "data") or die("Bağlanmadı!");

	

Gördüğünüz gibi ikisinde de basit bir kullanım var sadece PDO biraz alışageldiğimizden biraz farklı geliyor(en  azından benim başta öyle olmuştu). Fakat zamanla alışıyorsunuz ve Exception yapısı olması aslında throw için kolaylık oluyor ve daha sağlıklı bir şekilde hata gösteriyoruz.

SELECT işlemi için bakalım

 

	## SELECT ##
	
		// PDO
		$db = new PDO( 'mysql:host=localhost;dbName=test' , $user, $pass);
		$query = $db->query("SELECT * FROM urunler", PDO::FETCH_ASSOC); 
		if ( $query->rowCount() ){
			 foreach( $query as $output ){
				  print $output['urun_id']."
";
			 }
		}
		
		// Mysqli
		$cnnx = new mysqli("host","user","pass","data"); 
		$result = $cnnx->query("SELECT * FROM urunler");
		while($row = $result->fetch_assoc()){
			echo $row['urun_adi']."
";
		}

Insert işleminde

Insert işleminde PDO’da şekil şükela bir şey var. Bi bakalım.

 

	## INSERT ##
	
		// PDO
		$query = $db->prepare("INSERT INTO urunler SET
		urun_aciklamasi = :text,
		urun_adi = :ad,
		urun_fiyat = :fiyat");
		$insert = $query->execute(array(
			  "text" => "Bu bir deneme ürün açıklamasıdır..",
			  "ad" => "En yeni ürün!",
			  "kadi" => "99.90",
		));
		if ( $insert ){
			print "Ürün Başarıyla Eklendi!";
		}
		
		// Burada :text , :ad ve :fiyat kısımları oraya gelecek değişkenleri belirtir bunu bu şekilde yapmamızın bize yararı execute'ı kandırmış olup istedimiz sırada yazabiliyoruz diğer yararı ise anlama kolaylığı..
		
		// Mysqli
		$cnnx = new mysqli("host","user","pass","data"); 
		
		  $ekle = "Insert into urunler(urun_adi, urun_aciklamasi, urun_fiyat) VALUES (adi, aciklamasi, fiyat)";
			
			$insert = $cnnx->query($ekle);
			  
			  if(!$insert){
       				print("Eklenmedi!");
			  }


Yeni teknolojileri hızlı takip etmek gerek.

Şimdilik bu kadardı kolay gelsin 🙂

PDO VS Mysqli” üzerine 2 düşünce

Bir Cevap Yazın