PDO এবং OOP দিয়ে PHP CRUD পর্ব ১: Created Database, Table and Insert Data

CRUD কি?

CRUD

Computer Programming এ CRUD হচ্ছে Create+Read+Update+Delete এই চারটি শব্দের প্রথম (যথাক্রমে Create=C, Read=R, Update=U, Delete=D) Letter দিয়ে গঠিত সংক্ষিপ্ত রূপ। অর্থাৎ আপনি যখন কোনো web site অথবা সফটওয়্যার তৈরী করবেন, তখন software এর তথ্য গুলো Database এ রাখার জন্য প্রথমে Database,table এবং কিছু Data Create বা তৈরী করে নিতে হয়, আর তখন এটাকে আমরা CRUD এর Create Operation বলি। আবার আমাদের Create করা Data কে যখন browser এ দেখাই বা Read করি, তখন এটাকে আমরা CRUD এর Read Operation বলি। একই ভাবে Create করা Data কে যখন browser দিয়ে Update এবং Delete করি, তখন এটাকে আমরা CRUD এর Update এবং Delete Operation বলি। Computer Programming এ CRUD Operation কে যেকোনো software অথবা Web Development এর Engine হিসেবে বিবেচনা করা হয়।

OOP Encapsulation এবং Polymorphism ধারণাকে কাজে লাগিয়ে CRUD Class তৈরী করা :

প্রথমে বুঝা যাক, Encapsulation এবং Polymorphism এর ধারণা বলতে কি বুঝি ? Encapsulation-অর্থাৎ সব কিছু capsulate অবস্থায় থাকা। অনেকটা ক্যাপসুল মেডিসিন এর মতোই , যেভাবে একটা capsule এর বাইরে একটা আবরণ দিয়ে সব কিছু ভেতরে আটকানো থাকে । আর Polymorphism মানে হচ্ছে বহুরূপিতা। অর্থাৎ Class এবং এর Method গুলো বহুরূপে ব্যবহৃত হতে পারে। আর এইভাবে ভাবে এখানে Encapsulation এর ধারণাকে কাজে লাগিয়ে CRUD এর সব Operation (যথাক্রমে C => Create, R => Read, U => Update এবং D => Delete) গুলোকে আমরা Capsulate করে রাখবো। তারপর Polymorphism ধারণাকে কাজে লাগিয়ে এগুলোর বহুরূপে ব্যবহার নিশ্চিত করব।

এই পর্বে আমরা কি কি শিখবো?

এই পর্বে আমরা CRUD এর C=Create এর কাজ গুলো শিখবে। চলুন একটা একটা করে দেখা যাক।

PDO দিয়ে MySQL Database Host এর সাথে Connect

PHP PDO class থেকে একটা Object তৈরী করার মধ্যে দিয়ে আমরা MySQL Database Host এর সাথে কানেক্ট করতে পারি। এর জন্য আপনাকে PDO Class এর Parameter হিসেবে DSN (Data Source Name), Database hostname, Username এবং Password দিতে হবে । আর এই কাজটি আমরা একটা Crud নামক class এর constructor মেথড দিয়ে করব। তবে আপনি চাইলে আলাদা মেথড এর মধ্যেও কাজটি করতে পারেন। নিচের কোডটি দেখুন :

<?php
class Crud{
	private $conn;
	public function __construct($host,$user,$pass){
		$dsn="mysql:host=$host;";
		try {
			$this->conn = new PDO($dsn,$user,$pass);
			echo "Connection Success";
		}catch(PDOException $e) {
			die("Error!: ". $e->getMessage());
		}
	}
}

$db=new Crud("localhost","root","");
?>

সব কিছু ঠিকঠাক থাকলে আপনার নিচের মত একটা রেজাল্ট আসবে।

Connect MySQL Database

ব্যাখ্যা: আমরা চাচ্ছি class থেকে object তৈরী করার সাথে সাথে Database Host এর connect হব। আর তাই Database এর connection কাজটি constructor Method এ করেছি। এবং Constructor Method এর Parameter হিসেবে DSN (Data Source Name), Database hostname, Username এবং Password গ্রহণ করি। এবং $dsn variable টি তৈরী করি। তারপর new PDO object তৈরী করি এবং Database Host এর সাথে connect হই। তবে যদি কোনো কারণে Database Host এর সাথে connect না হয় , তাহলে নিচের মতো আউটপুট দেখাবে।

Database Connection Problem
https://blog.w3programmers.com/php-course/

PDO দিয়ে Database তৈরী

PHP PDO দিয়ে Database তৈরী করতে হলে আপনাকে PDO Class এর prepare() অথবা query() Method এর মধ্যে “CREATE DATABASE DatabaseName” Query রান করার মাধ্যমে Database তৈরী করতে হবে। আমরা আমাদের Crud Class এর মধ্যে নতুন Database তৈরির সুবিধা দেওয়ার জন্য একটা createDatabase নামে একটি method তৈরী করব । নিচের কোডটি দেখুন :

<?php
class Crud{
	private $conn;
	public function __construct($host,$user,$pass){
		$dsn="mysql:host=$host;";
		try {
			$this->conn = new PDO($dsn,$user,$pass);
			//echo "Connection Success";
		}catch(PDOException $e) {
			die("Error!: ". $e->getMessage());
		}
	}

	public function createDatabase($dbName,$collation="utf8_general_ci"){
		$sql=<<<"db"
			CREATE DATABASE $dbName
  			DEFAULT CHARACTER SET utf8
  			DEFAULT COLLATE $collation;
db;
		 $stmt=$this->conn->prepare($sql);
		 $stmt->execute();
		if($stmt->errorCode()=="00000"){
			 echo "Database Create Success";
		}
		else{
		 die($stmt->errorInfo()[2]);
		}
	}
}

$db=new Crud("localhost","root","");
$db->createDatabase("crud2");
?>

সব কিছু ঠিকঠাক থাকলে আপনার নিচের মত একটা রেজাল্ট আসবে।

PHP PDO Create Database

ব্যাখ্যা: লাইন নম্বর ১৪ তে আমরা createDatabase Method এ user থেকে Database Name এবং collation গ্রহণ করার জন্য $dbName এবং $collation নামে দুইটি Parameter ব্যবহার করেছি। তারপর $sql variable এর মধ্যে database তৈরির SQL তৈরী করি। লাইন নম্বর ২০ এবং ২১ এ যথাক্রমে prepare এবং execute করি। এবং ২২-২৮ নম্বর লাইনে আমরা database তৈরী হয়েছে কিনা সেটা চেক করব।

PDO দিয়ে MySQL Database এর একটি নির্দিষ্ট Database কে ব্যবহার বা Select

PHP PDO দিয়ে একটি নির্দিষ্ট Database Select অথবা Use করতে হলে আপনাকে PDO Class এর prepare() অথবা query() Method এর মধ্যে “USE DatabaseName” Query রান করার মাধ্যমে Database সিলেক্ট করতে হবে। আমরা আমাদের Crud Class এর মধ্যে নতুন Database সিলেক্ট সুবিধা দেওয়ার জন্য একটা selectDatabase নামে একটি method তৈরী করব । যার কাজ হবে এই class ব্যবহার কারী নিজের ইচ্ছা মতো database তৈরী করতে পারবে। নিচের কোডটি দেখুন :

<?php
class Crud{
	private $conn;
	public function __construct($host,$user,$pass){
		$dsn="mysql:host=$host;";
		try {
			$this->conn = new PDO($dsn,$user,$pass);
			//echo "Connection Success";
		}catch(PDOException $e) {
			die("Error!: ". $e->getMessage());
		}
	}

	public function selectDatabase($dbName){
		$sql="use $dbName";
		$stmt=$this->conn->prepare($sql);
		 $stmt->execute();
		if($stmt->errorCode()!="00000"){
			 die($stmt->errorInfo()[2]);
		}
		return "Database Selected";
	}
}

$db=new Crud("localhost","root","");
echo $db->selectDatabase("crud2");
?>

সব কিছু ঠিকঠাক থাকলে আপনার নিচের মত একটা রেজাল্ট আসবে।

PHP PDO Database Select or Use
https://blog.w3programmers.com/php-course/

PDO দিয়ে একটি নির্দিষ্ট Database এর মধ্যে একটি table তৈরী করা:

PHP PDO দিয়ে একটি নির্দিষ্ট Database এ যেকোনো table তৈরী করতে হলে আপনাকে PDO Class এর prepare() অথবা query() Method এর মধ্যে CREATE TABLE tableName” Query রান করার মাধ্যমে table তৈরী করতে হবে । আমরা আমাদের Crud Class এর মধ্যে একটি নির্দিষ্ট Database এর মধ্যে নতুন table তৈরীর সুবিধা দেওয়ার জন্য একটা createTable নামে একটি method তৈরী করব । নিচের কোডটি দেখুন :

<?php
class Crud{
	private $conn;
	public function __construct($host,$user,$pass){
		$dsn="mysql:host=$host;";
		try {
			$this->conn = new PDO($dsn,$user,$pass);
			//echo "Connection Success";
		}catch(PDOException $e) {
			die("Error!: ". $e->getMessage());
		}
	}

	public function selectDatabase($dbName){
		$sql="use $dbName";
		$stmt=$this->conn->prepare($sql);
		 $stmt->execute();
		if($stmt->errorCode()!="00000"){
			 die($stmt->errorInfo()[2]);
		}
		//return "Database Selected";
	}

	public function createTable(string $table, array $fields,$primary_key=""){
    $sql = "CREATE TABLE `$table`(";
    foreach ($fields as $definition) {
      $sql.= $definition['column_name'].' '.$definition['column_type'].', ';
    }
    $sql.= 'date_added'." DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,";
    $sql.= "PRIMARY KEY ($primary_key));";
   $stmt=$this->conn->prepare($sql);
		 $stmt->execute();
		if($stmt->errorCode()!="00000"){
			 die($stmt->errorInfo()[2]);
		}
		return "table $table Create Success";
  }
}

$db=new Crud("localhost","root","");
echo $db->selectDatabase("crud2");

$column_data  = array(
  array(
    'column_name'  => 'id',
    'column_type'  => 'INT UNSIGNED NOT NULL AUTO_INCREMENT'
  ),
  array(
    'column_name'  => 'name',
    'column_type'  => 'VARCHAR(20)'
  ),
  array(
    'column_name'  => 'color',
    'column_type'  => 'VARCHAR(20)'
  )
);
echo $db->createTable("fruits",$column_data,"id");
?>

সব কিছু ঠিকঠাক থাকলে আপনার নিচের মত একটা রেজাল্ট আসবে।

PHP PDO Create Table Function

ব্যাখ্যা: আমরা createTable Method এর ২৫ থেকে ৩০ নম্বর লাইনে আমাদের সিলেক্টেড database এ টেবিল তৈরী করার জন্য একটা SQL কোয়েরি তৈরী করি। তারপর সেটিকে ৩১ এবং ৩২ নম্বর লাইনে prepare এবং execute করি। তারপর ৩৩ এবং ৩৪ নম্বর লাইনে আমরা আমাদের টেবিল তৈরী ঠিকভাবে হয়েছে কিনা তা চেক করি।

PDO দিয়ে একটি নির্দিষ্ট table এর মধ্যে Data Insert:

PHP PDO দিয়ে একটি নির্দিষ্ট Database এ যেকোনো table এ Data Insert করতে হলে আপনাকে PDO Class এর prepare() অথবা query() Method এর মধ্যে “INSERT INTO tableName” Query রান করার মাধ্যমে table এ Data Insert করতে হবে । আমরা আমাদের Crud Class এর মধ্যে একটি নির্দিষ্ট Database এর মধ্যে একটি নির্দিষ্ট table এ Data Insert করার সুবিধা দেওয়ার জন্য Insert() নামে একটি method তৈরী করব । নিচের কোডটি দেখুন :

<?php
class Crud{
	private $conn;
	public function __construct($host,$user,$pass){
		$dsn="mysql:host=$host;";
		try {
			$this->conn = new PDO($dsn,$user,$pass);
			//echo "Connection Success";
		}catch(PDOException $e) {
			die("Error!: ". $e->getMessage());
		}
	}

	
	public function selectDatabase($dbName){
		$sql="use $dbName";
		$stmt=$this->conn->prepare($sql);
		 $stmt->execute();
		if($stmt->errorCode()!="00000"){
			 die($stmt->errorInfo()[2]);
		}
		//return "Database Selected";
	}

	
   public function Insert($table,array $data){
  	$sql="INSERT INTO $table ( ";
  	foreach($data as $col=>$val){
  		$sql.=" $col,";
  		}
  	$sql= substr($sql,0,-1);
  	$sql.=") VALUES ( ";
  	foreach($data as $col=>$val){
  		$sql.=" :$col,";
  	}
  	$sql= substr($sql,0,-1);
  	$sql.=" )";
  	
  		$stmt = $this->conn->prepare($sql);
  		foreach($data as $column=>$value){
  			$stmt->bindParam($column, $value);
  		}
  		$stmt->execute();
  	if($stmt->rowCount()>0){
  		echo "Data Insert Success";
  	}
  	else{
  		die("Data Insert Fail!");
  	}

  }
}

$db=new Crud("localhost","root","");
echo $db->selectDatabase("crud2");
$data=array(
	"name"=>"Banana",
	"color"=>"yellow"
);

$db->Insert("fruits",$data);
?>

সব কিছু ঠিকঠাক থাকলে আপনার নিচের মত একটা রেজাল্ট আসবে।

PHP Data Insert in Table

ব্যাখ্যা লাইন নম্বর ২৬ এ আমরা Insert Method এ দুটি parameter নেই । তারমধ্যে প্রথমটিহচ্ছে Table এর নাম, এবং দ্বিতীয়টি হচ্ছে একটা associative array , যেই array টির index এর নাম গুলো টেবিল এর column এর নামের সাথে হুবহু রাখবো। আর এই array টাকেই আমরা লাইন নম্বর ২৭-৩৭ SQL Query তে convert করি , যা পরবর্তীতে লাইন নম্বর ৩৯ এ SQL টিকে Prepare করি, এবং লাইন নম্বর ৪০-৪২ এ dynamically bindParam করি। finally লাইন নম্বর ৪৩ এ execute করি এবং লাইন নম্বর ৪৪ এ data insert হয়েছেকিনা তা চেক করি।

আমি মাসুদ আলম, বাংলাদেশের ৩৬ তম Zend Certified Engineer । ২০০৯ সালে কম্পিউটার সাইন্স থেকে বেচেলর ডিগ্রী অর্জন করি। দীর্ঘ ১৫ বছর আমি Winux Soft, SSL Wireless, IBCS-PRIMAX, Max Group, Canadian International Development Agency (CIDA), Care Bangladesh, World Vision, Hellen Keller, Amarbebsha Ltd সহ বিভিন্ন দেশি বিদেশী কোম্পানিতে ডেটা সাইন্স, মেশিন লার্নিং, বিগ ডেটা, ওয়েব ডেভেলপমেন্ট এবং সফটওয়্যার ডেভেলপমেন্ট এর উপর বিভিন্ন লিডিং পজিশন এ চাকরি এবং প্রজেক্ট লিড করি। এছাড়াও বাংলাদেশের ১৮৫ জন জেন্ড সার্টিফাইড ইঞ্জিনিয়ার এর মধ্যে ১২০ এরও অধিক ছাত্র আমার হাতে জেন্ড সার্টিফাইড ইঞ্জিনিয়ার হয়েছেন। বর্তমানে w3programmers ট্রেনিং ইনস্টিটিউট এ PHP এর উপর Professional এবং Advance Zend Certified PHP -8.2 Engineering, Laravel Mastering Course with ReactJS, Python Beginning To Advance with Blockchain, Machine Learning and Data Science, Professional WordPress Plugin Development Beginning to Advance কোর্স করাই। আর অবসর সময়ে w3programmers.com এ ওয়েব টেকনোলজি নিয়ে লেখালেখি করি।

Leave a Reply