How to connect MySQL Database with PHP in Bangla

আজকের এই পর্বে আমরা শিখব কিভাবে MySQL Database এর সাথে আমাদের website বা application এর জন্য database connection establish করা যায়।
কারন দেখেন, আমরা তো সব ডাটা Database এ রাখি কিন্তু আমাদের তো সেই ডাটাগুলোকে website বা application এ দেখাতে হবে, তাই না? সে জন্য Database থেকে ডাটা আনার জন্য প্রথমেই আমাদেরকে MySQL Database এর সাথে connection establish করতে হবে তারপর আমরা বিভিন্ন SQL Query এর মাধ্যমে ডাটা নিয়ে আসতে পারব, আপডেট করতে পারব, মুছে ফেলতে পারব কিন্তু প্রথম শর্ত একটাই 🙂 আগে connection establish করতে হবে।
তো চলুন শুরু করা যাক 🙂
প্রথমেই আমাদেরকে local server টি চালু করতে হবে। তারপর আপনার local server এর root ফোল্ডারে যেতে হবে। এখন এই root ফোল্ডার কিন্তু একেক local server এর জন্য একেক জায়গায় থাকে। যেমন আমি MAMP ব্যবহার করি Mac এর জন্য, এর root ফোল্ডার এর নাম হলো htdocs, আবার XAMPP local server এর root ফোল্ডারের হলো htdocs কিন্তু WAMP local server এর root ফোল্ডারের নাম হলো www। এই ব্যাপারটি খেয়াল রাখতে হবে।
মনে রাখবেন, root ফোল্ডারে ব্রাউজারের মাধ্যমে যেতে হলে আপনাকে http://localhost/ এই এড্রেস দিয়ে যেতে হবে। তবে সবসময় এই এড্রেস দিয়েই যে যাওয়া যাবে তা কিন্তু না। এটি নির্ভর করে আপনার local server এ Apache Port কি দেওয়া আছে তার উপর। যেমন যদি দেওয়া থাকে 8080 তাহলে যেতে হবে http://localhost:8080 আবার যদি Apache Port এর ভ্যালু 8000 দেওয়া থাকে তাহলে যেতে হবে http://localhost:8000।
এখন root ফোল্ডারে আমি sql নামে নতুন একটি ফোল্ডার তৈরী করে ১ টি ফাইল তৈরী করব যার নাম হবে connection.php। কেন এই নাম দিলাম? আপনি যা খুশি দিতে পারেন কিন্তু আমি বোঝানোর জন্য connection.php নাম দিয়েছি database এর সাথে connection establish করার জন্য যে কোড গুলো লিখব তা রাখাার জন্য ।
কিন্তু কথা হলো ফাইল কিভাবে তৈরী করব? ওকে, ফাইল তৈরী করার জন্য এই টিউটোরিয়ালটি দেখে আসতে পারেন।

Database এর সাথে connection

MySQL database এর সাথে connection establish করার জন্য আমরা MySQLi extension অথবা PDO (PHP Data Objects) ব্যবহার করতে পারি।
এখন প্রশ্ন হলো আমরা কোনটা ব্যবহার করব? ওকে, আমরা যে কোন ১টি ব্যবহার করলেই পারি কারন ২টিতে কিছু সুবিধা-অসুবিধা আছে। যেমন- আমরা যদি PDO ব্যবহার করি তাহলে ১২ টি database systems এর সাথে কাজ করতে পারব কিন্তু যদি MySQLi ব্যবহার করি তাহলে শুধুমাত্র MySQL databases এর সাথে কাজ করতে পারব।
ধরুন, আমরা কোন একটি Project এ কাজ করছি এখন যদি আমরা database পরিবর্তন করতে চাই তাহলে PDO এর মাধ্যমে সহজেই আমরা তা করতে পারি। তার জন্য শুধুমাত্র আমাদেরকে কিছু connection string এবং queries পরিবর্তন করতে হবে।
কিন্তু Project টি যদি MySQLi এ করা থাকে তাহলে আামাদেরকে সম্পূর্ন code/queries পরিবর্তন করতে হবে। আর তা অবশ্যই আমাদের জন্য অনেক কঠিন হয়ে পড়বে। সেজন্য সবকিছু চিন্তা করেই আমাদেরকে সিদ্বান্ত নিতে হবে।
* MySQLi এবং PDO তে Prepared Statements আছে যা কিনা SQL injection attack থেকে রক্ষা করে।
* MySQLi এবং PDO তে object-oriented ভাবে কোড লিখা যায় তবে MySQLi এ আমরা procedural ভাবেও কোড লিখতে পারি।

MySQLi এ Object-Oriented ভাবে কিভাবে database এর সাথে connection করব?

প্রথমেই আমরা connection.php পেজটি ওপেন করব। এই পেজেই আমরা আমাদের কোডগুলো করব। এরপর আমরা ৩ টি variable নিব যেমন- $server, $username, $password এবং এই ৩ টি variable এর মান দিব-

$server = 'localhost';
$username = 'root';
$password = 'root';

$server এর মান কেন localhost দিলাম? কারন আমার project এর hostname হলো localhost কিন্তু আপনার ক্ষেত্রে যদি ভিন্ন থাকে তাহলে সেটি ব্যবহার করবেন।
এরপর $username এর মান root দিলাম কারন আমার MySQL Database এর user এর নাম হলো root এবং password হলো root, কিন্তু আপনার ক্ষেত্রে ভিন্নও হতে পারে।
এরপর mysqli ক্লাসের ১টি instance তৈরী করব –

new mysqli();

এই mysqli ক্লাসের constructor মেথড ৩টি arguments গ্রহন করে তা হলো server এর নাম, MySQL Database এর username এবং password। এই জন্য আমরা ঐ ৩টি variable পাঠাবো-

new mysqli($server, $username, $password);

আমরা চাইলে এই instance কে ১টি variable এর মধ্যে রাখতে পারি মেযন-

$connection = new mysqli($server, $username, $password);

এখান আমরা যদি এই $connection ভ্যারিয়েবলটিকে print_r() করি তাহলে আমরা দেখতে পাবো-

mysqli Object
(
    [affected_rows] => 0
    [client_info] => mysqlnd 7.4.2
    [client_version] => 70402
    [connect_errno] => 0
    [connect_error] =>
    [errno] => 0
    [error] =>
    [error_list] => Array
    (
    )
    [field_count] => 0
    [host_info] => Localhost via UNIX socket
    [info] =>
    [insert_id] => 0
    [server_info] => 5.7.26
    [server_version] => 50726
    [sqlstate] => 00000
    [protocol_version] => 10
    [thread_id] => 1710
    [warning_count] => 0
)

তাহলে আমরা দেখতে পাচ্ছি যে mysqli Object এর অনেক গুলো property. এই property গুলো এক একটি এককে ধরনের output দেয়। যেমন আমরা যদি চাই আমাদের connection টি ঠিক মত হয়েছি কিনা তা দেখতে চাই তাহলে আমরা connect_error নামের property টি ব্যবহার করতে পারি। যেমন-

$connection->connect_error

আমরা যদি echo করি তাহলে দেখতে পাবো যে এর মান খালি। মানে কোন error নেই। তাহলে connection টি ঠিকমত হয়েছে কিনা তা দেখতে হলো আমরা একটি condition ব্যবহার করতে পারি। যেমন-

if ($connection->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

উপরের কোডে বলা হচ্ছে যে, connect_error নামের property যদি true হয় তাহলে বর্তমান পেজটির execution বন্ধ করে দেও এবং একটি error মেসেজে দেখাও। আর যদি connect_error নামের property যদি false হয় তাহলে আমাদের আর কিছু দেখাবে না। মানে error দেখাবে না।
এভাবেই আমরা MySQLi Object-Oriented ভাবে MySQL Database এর সাথে আমাদের project টি connect করতে পারব।

MySQLi Procedural ভাবে কিভাবে database এর সাথে connection করব?

Procedural ভাবে connection করা একবোরে সহজ। এখানে আর আমাদের object এর ব্যবহার করতে হবে না। শুধুমাত্র mysqli_connect নামের function টি ব্যবহার করতে হবে। মনে রাখবেন mysqli_connect function টি কিন্তু mysqli::__construct() এর একটি alias.
এখন mysqli_connect এর argumetns হিসেবে ৩টি variable দিতে হবে। মেযন-

$server = "localhost";
$username = "root";
$password = "root";
$connection = mysqli_connect($server, $username, $password);
if (!$connection) {
    die("Connection failed: " . mysqli_connect_error());
}

উপরের কোডে আমরা দেখতে পাচ্ছি যে, আগের মতই আমরা ৩টি variable নিয়েছি এবং প্রত্যেকের value দিয়ে এসেছি। তারপর mysqli_connect নামের function টি ব্যবহার করে $connection নামের variable এর মধ্যে রেখেছি। আবার এই variable টি check করে দেখেছি যে কোন error আছে কি না।
সহজ তাই না 🙂

PDO এর মাধ্যমে কিভাবে database এর সাথে connection করব?

এক্ষেত্রে আমরা PDO নামের class টি ব্যবহার করব এবং এর arguments হিসেবে ৩ variable পাঠাবো। যেমন- server এবং database এর নাম, database এর username এবং database এর password.
তাহলে আমাদের কোডটি হবে এইরকম –

$server = "localhost";
$username = "root";
$password = "root";
$connection = new PDO("mysql:host=$server;dbname=myDB", $username, $password);

এখানে server এবং database এর নাম একটু ভিন্নভাবে দেওয়া আছে এই ব্যাপারটি খেয়াল রাখবেন। যেমন- mysql:host=$server;dbname=practice এরপর username এবং password.
এখন আমরা যদি connection টি conditionally চেক করতে চাই তাহলে আমরা লিখব এই রকম-

$server = "localhost";
$username = "root";
$password = "root";
try {
    $connection = new PDO("mysql:host=$server;dbname=practice", $username, $password);
    $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully";
} catch(PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}

এখানে আমরা if else পরিবর্তে try catch ব্লকটি ব্যবহার করেছি। try catch ব্লকটি মূলত PHP Exception Handle করার জন্য ব্যবহার করা হয়। Exception সম্পর্কে জানতে হলে এই আর্টিকেলটি পড়তে পারেন।
try ব্লকের মধ্যে আমরা database এর connection টি দিয়েছি এবং catch ব্লকের মধ্যে error মেসেজ দিয়েছি (যদি থাকে)। তবে আমরা setAttribute নামে একটি মেথড ব্যবহার করেছি। এর কাজ হলো database handle এ কতগুলো attribute set করা।
এতক্ষন আমরা দেখেছি যে কিভাবে আমরা Database এর সাথে Connection করেছি কিন্তু এই Connection গুলোতে close করিনি, তাই না? হ্যা যদিও Connection অটোমেটিকালি close হয়ে যায় যখন বর্তমান script টির কাজ শেষ হয়ে যায়।
তবে আমরা যদি তার আগেই Connection টি close করতে চাই তাহলে আমাদেরকে MySQLi Object-Oriented এর জন্য $connection->close(); এবং MySQLi Procedural এর জন্য mysqli_close($connection) আর PDO এর জন্য $connection = null ব্যবহার করব।

1 Comment

Leave a Comment