Skill

MySQLi এর কার্যপ্রণালী

মাইএসকিউএল আই (MySQLi) - Database Tutorials

309

MySQLi (MySQL Improved) হলো একটি PHP এক্সটেনশন যা MySQL ডেটাবেসের সাথে যোগাযোগ স্থাপন ও পরিচালনার জন্য উন্নত ফিচার সরবরাহ করে। এটি MySQL ডেটাবেসের জন্য আধুনিক ও নিরাপদ পদ্ধতি হিসেবে কাজ করে, যেখানে MySQLi SQL কুয়েরি এক্সিকিউট করার জন্য বিভিন্ন পদ্ধতি এবং কার্যপ্রণালী প্রদান করে। MySQLi প্রথাগত mysql এক্সটেনশনের পরিপূরক হিসেবে আসলেও এটি আরও অনেক উন্নত ও নিরাপদ ফিচার প্রদান করে, যেমন প্রিপেয়ার্ড স্টেটমেন্ট, বাইন্ডিং প্যারামিটার, এবং ট্রান্সেকশন ম্যানেজমেন্ট

MySQLi দুইভাবে ব্যবহৃত হতে পারে:

  • প্রসেস (Procedural) স্টাইল
  • অবজেক্ট-ওরিয়েন্টেড (Object-Oriented) স্টাইল

MySQLi এর কার্যপ্রণালী (Procedural এবং Object-Oriented স্টাইল)

MySQLi এর কার্যপ্রণালী বুঝতে প্রথমে দুটি প্রধান ধাপ দেখা প্রয়োজন: ডেটাবেসে সংযোগ স্থাপন এবং SQL কুয়েরি পরিচালনা।


১. ডেটাবেসে সংযোগ স্থাপন

MySQLi দিয়ে ডেটাবেসে সংযোগ স্থাপন দুটি স্টাইলেই করা যেতে পারে। নিচে তার উদাহরণ দেওয়া হলো।

১.১. Procedural স্টাইলে সংযোগ

<?php
// ডেটাবেস সংযোগ
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "your_database_name";

$conn = mysqli_connect($servername, $username, $password, $dbname);

if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>

এখানে mysqli_connect() ফাংশন ব্যবহার করে ডেটাবেসে সংযোগ স্থাপন করা হয়েছে। যদি সংযোগ সফল হয়, তাহলে "Connected successfully" মেসেজ প্রদর্শিত হবে।

১.২. Object-Oriented স্টাইলে সংযোগ

<?php
// ডেটাবেস সংযোগ
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "your_database_name";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>

এখানে new mysqli() দিয়ে সংযোগ স্থাপন করা হয়েছে এবং যদি কোনো সমস্যা থাকে, তবে connect_error প্রপার্টি ব্যবহার করে ত্রুটি ধরানো হয়।


২. SQL কুয়েরি পরিচালনা

MySQLi ব্যবহার করে বিভিন্ন ধরনের SQL কুয়েরি (SELECT, INSERT, UPDATE, DELETE) এক্সিকিউট করা যেতে পারে।

২.১. SELECT কুয়েরি (Procedural স্টাইল)

<?php
// SELECT কুয়েরি এক্সিকিউট করা
$sql = "SELECT id, name, email FROM users";
$result = mysqli_query($conn, $sql);

// রেজাল্ট দেখানো
if (mysqli_num_rows($result) > 0) {
    while($row = mysqli_fetch_assoc($result)) {
        echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. "<br>";
    }
} else {
    echo "0 results";
}

mysqli_close($conn);
?>

এখানে mysqli_query() ফাংশন ব্যবহার করা হয়েছে SQL কুয়েরি এক্সিকিউট করার জন্য, এবং mysqli_fetch_assoc() ফাংশন ব্যবহার করে রেজাল্টস পড়া হয়েছে।

২.২. SELECT কুয়েরি (Object-Oriented স্টাইল)

<?php
// SELECT কুয়েরি এক্সিকিউট করা
$sql = "SELECT id, name, email FROM users";
$result = $conn->query($sql);

// রেজাল্ট দেখানো
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. "<br>";
    }
} else {
    echo "0 results";
}

$conn->close();
?>

এখানে query() মেথড ব্যবহার করে কুয়েরি এক্সিকিউট করা হয়েছে এবং fetch_assoc() মেথড ব্যবহার করে রেজাল্ট থেকে ডেটা পড়া হয়েছে।


৩. প্রিপেয়ার্ড স্টেটমেন্ট (Prepared Statement)

প্রিপেয়ার্ড স্টেটমেন্টের মাধ্যমে SQL ইনজেকশন থেকে সুরক্ষা পাওয়া যায় এবং ডেটাবেস অপারেশনগুলি আরও দক্ষ হয়।

৩.১. প্রিপেয়ার্ড স্টেটমেন্ট (Procedural স্টাইল)

<?php
// প্রিপেয়ার্ড স্টেটমেন্ট ব্যবহার করা
$stmt = mysqli_prepare($conn, "INSERT INTO users (name, email, age) VALUES (?, ?, ?)");
mysqli_stmt_bind_param($stmt, "ssi", $name, $email, $age);

// প্যারামিটার সেট করা
$name = "Alice";
$email = "alice@example.com";
$age = 28;

// এক্সিকিউট করা
mysqli_stmt_execute($stmt);

echo "New record created successfully";

// স্টেটমেন্ট ক্লোজ করা
mysqli_stmt_close($stmt);
mysqli_close($conn);
?>

এখানে mysqli_prepare() ব্যবহার করে কুয়েরি প্রস্তুত করা হয়েছে এবং mysqli_stmt_bind_param() এর মাধ্যমে প্যারামিটারগুলি বাইন্ড করা হয়েছে। ssi হল ডেটার টাইপ: s স্ট্রিং, i পূর্ণসংখ্যা।

৩.২. প্রিপেয়ার্ড স্টেটমেন্ট (Object-Oriented স্টাইল)

<?php
// প্রিপেয়ার্ড স্টেটমেন্ট ব্যবহার করা
$stmt = $conn->prepare("INSERT INTO users (name, email, age) VALUES (?, ?, ?)");
$stmt->bind_param("ssi", $name, $email, $age);

// প্যারামিটার সেট করা
$name = "Alice";
$email = "alice@example.com";
$age = 28;

// এক্সিকিউট করা
$stmt->execute();

echo "New record created successfully";

// স্টেটমেন্ট ক্লোজ করা
$stmt->close();
$conn->close();
?>

এখানে prepare() এবং bind_param() মেথড ব্যবহার করে প্রিপেয়ার্ড স্টেটমেন্ট তৈরি করা হয়েছে।


৪. Error Handling (ত্রুটি পরিচালনা)

MySQLi তে ত্রুটি পরিচালনা করা গুরুত্বপূর্ণ, যাতে ডেটাবেস অপারেশনগুলির সময় ত্রুটি ধরতে এবং তা সমাধান করতে পারা যায়।

৪.১. Procedural স্টাইল ত্রুটি পরিচালনা

<?php
$conn = mysqli_connect($servername, $username, $password, $dbname);

if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

// SQL কুয়েরি চালানো
$sql = "SELECT * FROM non_existent_table";
$result = mysqli_query($conn, $sql);

if (!$result) {
    echo "Error: " . mysqli_error($conn);
}

mysqli_close($conn);
?>

এখানে mysqli_error() ফাংশন ব্যবহার করে ত্রুটির বার্তা প্রিন্ট করা হয়েছে।

৪.২. Object-Oriented স্টাইল ত্রুটি পরিচালনা

<?php
$conn = new mysqli($servername, $username, $password, $dbname);

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

// SQL কুয়েরি চালানো
$sql = "SELECT * FROM non_existent_table";
$result = $conn->query($sql);

if (!$result) {
    echo "Error: " . $conn->error;
}

$conn->close();
?>

এখানে error প্রপার্টি ব্যবহার করে ত্রুটির বার্তা দেখা যাচ্ছে।


সারাংশ

MySQLi (MySQL Improved) PHP এর একটি এক্সটেনশন যা MySQL ডেটাবেসের সাথে সম্পর্কিত বিভিন্ন কাজের জন্য উন্নত ফিচার সরবরাহ করে। এটি Procedural এবং Object-Oriented উভয় স্টাইলে কাজ করতে পারে এবং এতে রয়েছে বিভিন্ন কার্যপ্রণালী যেমন ডেটাবেস সংযোগ, SQL কুয়েরি এক্সিকিউট, প্রিপেয়ার্ড স্টেটমেন্ট, ত্রুটি পরিচালনা, ইত্যাদি। MySQLi ব্যবহারের মাধ্যমে আপনি SQL ইনজেকশন থেকে সুরক্ষা, কোডের উন্নতি এবং ডেটাবেস অপারেশনের দক্ষতা নিশ্চিত করতে পারেন।

Content added By

MySQLi (MySQL Improved) এর Object-Oriented API পদ্ধতিতে MySQL ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করার জন্য অবজেক্ট-ওরিয়েন্টেড পদ্ধতি ব্যবহার করা হয়। এতে, আপনি একটি অবজেক্ট তৈরি করে তার মেথডের মাধ্যমে ডেটাবেস অপারেশন সম্পন্ন করতে পারেন। Object-Oriented স্টাইলের মাধ্যমে কোড আরও সুসংগঠিত এবং পুনঃব্যবহারযোগ্য হয়, যা বড় এবং জটিল অ্যাপ্লিকেশন তৈরিতে সুবিধাজনক।


MySQLi Object-Oriented API এর প্রধান বৈশিষ্ট্য

  1. অবজেক্ট ব্যবহার: MySQLi এর মাধ্যমে ডেটাবেসের সাথে কাজ করতে একটি অবজেক্ট তৈরি করা হয় এবং সেই অবজেক্টের মেথডগুলো ব্যবহার করে কার্যকলাপ করা হয়।
  2. সরাসরি সংযোগ: ডেটাবেসের সাথে সংযোগ স্থাপন, ক্যোয়ারি করা, রেজাল্ট সংগ্রহ করা এবং অন্যান্য ডেটাবেস কার্যকলাপের জন্য একক অবজেক্ট ব্যবহার করা হয়।
  3. অ্যাক্সেস মেথডস: ডেটাবেস অপারেশনগুলো করার জন্য নির্দিষ্ট মেথড রয়েছে যেমন query(), close(), fetch_assoc() ইত্যাদি।

MySQLi Object-Oriented API এর মাধ্যমে ডেটাবেস সংযোগ তৈরি

MySQLi Object-Oriented API ব্যবহার করে ডেটাবেসের সাথে সংযোগ স্থাপন করার পদ্ধতি:

<?php
// MySQLi অবজেক্ট তৈরি করে ডেটাবেসে সংযোগ স্থাপন
$mysqli = new mysqli("localhost", "username", "password", "database_name");

// সংযোগ সফল হলে চেক করা
if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
} else {
    echo "Successfully connected to the database.";
}
?>

এখানে, new mysqli() পদ্ধতি ব্যবহার করে ডেটাবেসের সাথে সংযোগ স্থাপন করা হয়েছে। যদি সংযোগ সফল না হয়, তবে connect_error এর মাধ্যমে ত্রুটি বার্তা দেখা যাবে।


MySQLi Object-Oriented API এর মাধ্যমে Query Execute করা

ডেটাবেসে ক্যোয়ারি চালানোর জন্য MySQLi এর query() মেথড ব্যবহার করা হয়। উদাহরণস্বরূপ, একটি SELECT ক্যোয়ারি চালানো:

<?php
// ক্যোয়ারি চালানো
$sql = "SELECT id, name, email FROM users";
$result = $mysqli->query($sql);

// রেজাল্ট চেক করা
if ($result->num_rows > 0) {
    // প্রতিটি রেকর্ড প্রিন্ট করা
    while($row = $result->fetch_assoc()) {
        echo "ID: " . $row["id"] . " - Name: " . $row["name"] . " - Email: " . $row["email"] . "<br>";
    }
} else {
    echo "No results found.";
}
?>

এখানে, query() মেথডের মাধ্যমে SQL স্টেটমেন্ট এক্সিকিউট করা হয় এবং fetch_assoc() মেথড ব্যবহার করে রেজাল্টস অ্যারের মধ্যে ডেটা বের করা হয়।


MySQLi Object-Oriented API এর মাধ্যমে Data Insertion

ডেটাবেসে নতুন ডেটা ইনসার্ট করার জন্য query() মেথড ব্যবহার করা হয়:

<?php
// ইনসার্ট ক্যোয়ারি
$sql = "INSERT INTO users (name, email) VALUES ('John Doe', 'john.doe@example.com')";

// ক্যোয়ারি এক্সিকিউট করা
if ($mysqli->query($sql) === TRUE) {
    echo "New record created successfully.";
} else {
    echo "Error: " . $sql . "<br>" . $mysqli->error;
}
?>

এখানে, query() মেথড ব্যবহার করে SQL ইনসার্ট স্টেটমেন্টটি এক্সিকিউট করা হয়েছে। সফল হলে একটি বার্তা প্রদর্শিত হয় এবং ত্রুটির ক্ষেত্রে ত্রুটি বার্তা দেখানো হয়।


MySQLi Object-Oriented API এর মাধ্যমে Data Update

ডেটাবেসে বিদ্যমান ডেটা আপডেট করার জন্য query() মেথড ব্যবহার করা হয়:

<?php
// আপডেট ক্যোয়ারি
$sql = "UPDATE users SET email='john.newemail@example.com' WHERE id=1";

// ক্যোয়ারি এক্সিকিউট করা
if ($mysqli->query($sql) === TRUE) {
    echo "Record updated successfully.";
} else {
    echo "Error: " . $sql . "<br>" . $mysqli->error;
}
?>

এখানে, UPDATE ক্যোয়ারি চালানোর মাধ্যমে নির্দিষ্ট রেকর্ডের ডেটা আপডেট করা হচ্ছে।


MySQLi Object-Oriented API এর মাধ্যমে Data Deletion

ডেটাবেস থেকে ডেটা মুছে ফেলার জন্যও query() মেথড ব্যবহার করা হয়:

<?php
// ডিলিট ক্যোয়ারি
$sql = "DELETE FROM users WHERE id=1";

// ক্যোয়ারি এক্সিকিউট করা
if ($mysqli->query($sql) === TRUE) {
    echo "Record deleted successfully.";
} else {
    echo "Error: " . $sql . "<br>" . $mysqli->error;
}
?>

এখানে, DELETE ক্যোয়ারি চালানোর মাধ্যমে নির্দিষ্ট রেকর্ডটি মুছে ফেলা হচ্ছে।


MySQLi Object-Oriented API এর মাধ্যমে Prepared Statements

MySQLi-এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল Prepared Statements, যা SQL ইনজেকশন আক্রমণ প্রতিরোধে সাহায্য করে এবং কোডের পারফরম্যান্স বৃদ্ধি করে। নিম্নলিখিত উদাহরণে আমরা Prepared Statement ব্যবহার দেখব:

<?php
// প্রিপেয়ারড স্টেটমেন্ট তৈরি করা
$stmt = $mysqli->prepare("INSERT INTO users (name, email) VALUES (?, ?)");

// প্যারামিটার বাইন্ড করা
$stmt->bind_param("ss", $name, $email);

// ভ্যালু সেট করা
$name = "Alice";
$email = "alice@example.com";

// স্টেটমেন্ট এক্সিকিউট করা
$stmt->execute();

// সফলভাবে ইনসার্ট হওয়া
echo "New record created successfully.";

// স্টেটমেন্ট বন্ধ করা
$stmt->close();
?>

এখানে, prepare() মেথডের মাধ্যমে একটি প্রস্তুতকৃত স্টেটমেন্ট তৈরি করা হয়, এবং bind_param() মেথডের মাধ্যমে প্যারামিটার বাইন্ড করা হয়। তারপর execute() মেথডের মাধ্যমে স্টেটমেন্টটি এক্সিকিউট করা হয়।


MySQLi Object-Oriented API এর মাধ্যমে Connection বন্ধ করা

অবশেষে, ডেটাবেসের সাথে সংযোগ বন্ধ করার জন্য close() মেথড ব্যবহার করা হয়:

<?php
// ডেটাবেস সংযোগ বন্ধ করা
$mysqli->close();
?>

এটি সংযোগ শেষ করার পর ডেটাবেস সংযোগটি বন্ধ করে দেয়।


সারাংশ

MySQLi-এর Object-Oriented API পদ্ধতি ব্যবহার করে, PHP অ্যাপ্লিকেশনগুলোতে MySQL ডেটাবেসের সাথে সুরক্ষিত এবং কার্যকরভাবে ইন্টারঅ্যাক্ট করা যায়। এর মাধ্যমে, আপনি ডেটাবেস সংযোগ তৈরি করা, ক্যোয়ারি এক্সিকিউট করা, ডেটা ইনসার্ট, আপডেট এবং ডিলিট করার পাশাপাশি Prepared Statements ব্যবহার করে নিরাপদভাবে ডেটাবেস অপারেশন করতে পারেন। অবজেক্ট-ওরিয়েন্টেড পদ্ধতি কোডের পুনঃব্যবহারযোগ্যতা এবং পরিষ্কার গঠন নিশ্চিত করে, যা বড় এবং জটিল প্রকল্পগুলিতে সুবিধাজনক।

Content added By

MySQLi Procedural API হল পিএইচপিতে MySQL ডেটাবেসের সাথে যোগাযোগ করার জন্য ব্যবহৃত একটি পদ্ধতিগত স্টাইল। এটি MySQLi এক্সটেনশনের মাধ্যমে ডেটাবেস সংযোগ স্থাপন, কোয়েরি এক্সিকিউট করা, ডেটা রিট্রিভ করা, এবং অন্যান্য ডেটাবেস অপারেশন সম্পাদন করার জন্য ব্যবহৃত হয়। Procedural স্টাইলের সাহায্যে, আপনি সরাসরি ফাংশন কল করে ডেটাবেসের সাথে কাজ করতে পারেন, কোনও অবজেক্ট তৈরি না করেই।

এই গাইডে, আমরা MySQLi Procedural API এর কিছু গুরুত্বপূর্ণ ফাংশন এবং তাদের ব্যবহার দেখব।


1. MySQLi Procedural API এর সাথে সংযোগ তৈরি

MySQLi Procedural API ব্যবহার করে ডেটাবেস সংযোগ তৈরি করতে mysqli_connect() ফাংশন ব্যবহার করা হয়। এটি ডেটাবেসের হোস্টনেম, ইউজারনেম, পাসওয়ার্ড এবং ডেটাবেসের নাম গ্রহণ করে।

উদাহরণ:

<?php
// MySQLi Procedural API দিয়ে সংযোগ তৈরি
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";

// সংযোগ তৈরি
$conn = mysqli_connect($servername, $username, $password, $dbname);

// সংযোগ চেক করা
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

echo "Connected successfully";
?>

এখানে:

  • mysqli_connect() ফাংশনটি ডেটাবেসের সাথে সংযোগ তৈরি করে।
  • যদি সংযোগ ব্যর্থ হয়, তাহলে mysqli_connect_error() ফাংশনটি ব্যবহার করে ত্রুটি বার্তা দেখানো হয়।

2. MySQLi Procedural API দিয়ে SQL কোয়েরি এক্সিকিউট করা

MySQLi Procedural API ব্যবহার করে SQL কোয়েরি এক্সিকিউট করার জন্য mysqli_query() ফাংশন ব্যবহার করা হয়। এই ফাংশনটি সাধারণত SELECT, INSERT, UPDATE এবং DELETE স্টেটমেন্টের জন্য ব্যবহৃত হয়।

উদাহরণ:

<?php
// MySQLi Procedural API দিয়ে সংযোগ তৈরি
$conn = mysqli_connect("localhost", "root", "", "test_db");

// SELECT কোয়েরি এক্সিকিউট করা
$sql = "SELECT id, name, email FROM users";
$result = mysqli_query($conn, $sql);

// ফলাফল চেক করা
if (mysqli_num_rows($result) > 0) {
    while($row = mysqli_fetch_assoc($result)) {
        echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. "<br>";
    }
} else {
    echo "0 results";
}

// সংযোগ বন্ধ করা
mysqli_close($conn);
?>

এখানে:

  • mysqli_query() ফাংশনটি SQL কোয়েরি এক্সিকিউট করে এবং রেজাল্ট রিটার্ন করে।
  • mysqli_num_rows() ফাংশনটি রিটার্ন হওয়া রেকর্ডের সংখ্যা চেক করে।
  • mysqli_fetch_assoc() ফাংশনটি রিটার্ন হওয়া রেজাল্টকে অ্যাসোসিয়েটিভ অ্যারে হিসেবে ফেরত দেয়।

3. MySQLi Procedural API দিয়ে INSERT, UPDATE, DELETE অপারেশন

INSERT, UPDATE, DELETE কোয়েরি এক্সিকিউট করার জন্যও mysqli_query() ফাংশন ব্যবহার করা হয়, তবে এগুলি সাধারণত ডেটা পরিবর্তন বা আপডেট করার জন্য ব্যবহৃত হয়।

উদাহরণ: INSERT Operation

<?php
// MySQLi Procedural API দিয়ে সংযোগ তৈরি
$conn = mysqli_connect("localhost", "root", "", "test_db");

// INSERT কোয়েরি এক্সিকিউট করা
$sql = "INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com')";

if (mysqli_query($conn, $sql)) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}

// সংযোগ বন্ধ করা
mysqli_close($conn);
?>

এখানে:

  • mysqli_query() ফাংশনটি SQL কোয়েরি এক্সিকিউট করে এবং সফল হলে একটি অ্যাকনলেজমেন্ট বার্তা দেখায়।
  • mysqli_error() ফাংশনটি যদি কোনো ত্রুটি ঘটে, তবে ত্রুটির বার্তা প্রদর্শন করে।

উদাহরণ: UPDATE Operation

<?php
// MySQLi Procedural API দিয়ে সংযোগ তৈরি
$conn = mysqli_connect("localhost", "root", "", "test_db");

// UPDATE কোয়েরি এক্সিকিউট করা
$sql = "UPDATE users SET email='john.doe@example.com' WHERE name='John Doe'";

if (mysqli_query($conn, $sql)) {
    echo "Record updated successfully";
} else {
    echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}

// সংযোগ বন্ধ করা
mysqli_close($conn);
?>

উদাহরণ: DELETE Operation

<?php
// MySQLi Procedural API দিয়ে সংযোগ তৈরি
$conn = mysqli_connect("localhost", "root", "", "test_db");

// DELETE কোয়েরি এক্সিকিউট করা
$sql = "DELETE FROM users WHERE name='John Doe'";

if (mysqli_query($conn, $sql)) {
    echo "Record deleted successfully";
} else {
    echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}

// সংযোগ বন্ধ করা
mysqli_close($conn);
?>

4. MySQLi Procedural API দিয়ে Prepared Statements ব্যবহার করা

MySQLi Prepared Statements ব্যবহার করে SQL ইনজেকশন থেকে সুরক্ষা প্রদান করে। এটি SQL কোড এবং ডেটাকে আলাদা করে দেয়, ফলে নিরাপত্তা বাড়ে এবং কোডের কার্যক্ষমতা বাড়ে।

উদাহরণ:

<?php
// MySQLi Procedural API দিয়ে সংযোগ তৈরি
$conn = mysqli_connect("localhost", "root", "", "test_db");

// Prepared Statement তৈরি করা
$stmt = mysqli_prepare($conn, "INSERT INTO users (name, email) VALUES (?, ?)");

// ইউজার ইনপুটের জন্য ভ্যালু বाइন্ড করা
$name = "Jane Doe";
$email = "jane.doe@example.com";
mysqli_stmt_bind_param($stmt, "ss", $name, $email);

// স্টেটমেন্ট এক্সিকিউট করা
mysqli_stmt_execute($stmt);

echo "New record created successfully";

// স্টেটমেন্ট বন্ধ করা
mysqli_stmt_close($stmt);

// সংযোগ বন্ধ করা
mysqli_close($conn);
?>

এখানে:

  • mysqli_prepare() ফাংশনটি SQL স্টেটমেন্ট প্রস্তুত করে।
  • mysqli_stmt_bind_param() ফাংশনটি প্যারামিটার বাইন্ড করে।
  • mysqli_stmt_execute() ফাংশনটি প্রস্তুতকৃত স্টেটমেন্ট এক্সিকিউট করে।

5. MySQLi Procedural API দিয়ে Error Handling

MySQLi তে ত্রুটি সনাক্তকরণের জন্য mysqli_error() এবং mysqli_errno() ফাংশন ব্যবহার করা হয়।

উদাহরণ:

<?php
// MySQLi Procedural API দিয়ে সংযোগ তৈরি
$conn = mysqli_connect("localhost", "root", "", "test_db");

if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

// ভুল কোয়েরি (ত্রুটি তৈরি)
$sql = "SELEC * FROM users"; // ভুল সিলেক্ট স্টেটমেন্ট

if (!mysqli_query($conn, $sql)) {
    echo "Error: " . mysqli_error($conn);
}

// সংযোগ বন্ধ করা
mysqli_close($conn);
?>

এখানে:

  • mysqli_error() ফাংশনটি ত্রুটির বার্তা প্রদান করে।
  • mysqli_errno() ফাংশনটি ত্রুটির কোড প্রদান করে।

MySQLi Procedural API হল MySQL ডেটাবেসের সাথে কাজ করার একটি সহজ এবং সরল পদ্ধতি। এতে আপনি সরাসরি ফাংশন ব্যবহার করে ডেটাবেসের সাথে যোগাযোগ করতে পারেন। আপনি MySQLi Procedural API ব্যবহার করে সহজে সংযোগ তৈরি, ডেটা ইনসার্ট, রিট্রিভ, আপডেট, ডিলিট এবং নিরাপদ কোডিং (Prepared Statements) করতে পারবেন। এটি ডেভেলপারদের জন্য একটি শক্তিশালী এবং কার্যকরী টুল।

Content added By

MySQLi (MySQL Improved) এবং PDO (PHP Data Objects) হল দুটি জনপ্রিয় এক্সটেনশন যা PHP তে ডাটাবেস অপারেশন করার জন্য ব্যবহৃত হয়। যদিও দুইটি একে অপরের বিকল্প হিসেবে ব্যবহার করা যায়, তবে তাদের মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে। নিচে MySQLi এবং PDO এর মধ্যে প্রধান তুলনা করা হলো।


1. ডাটাবেস সাপোর্ট

  • MySQLi:
    • শুধুমাত্র MySQL ডাটাবেস সিস্টেমের জন্য তৈরি।
    • তাই, এটি শুধুমাত্র MySQL ডাটাবেসের সাথে কাজ করতে পারে।
  • PDO:
    • PDO একাধিক ডাটাবেস সিস্টেমের সাথে কাজ করতে সক্ষম, যেমন MySQL, PostgreSQL, SQLite, Oracle, SQL Server ইত্যাদি।
    • এটি বিভিন্ন ডাটাবেস সিস্টেমের সাথে একযোগে কাজ করার সুবিধা প্রদান করে।

2. এক্সটেনশন পদ্ধতি (Procedural vs Object-Oriented)

  • MySQLi:
    • MySQLi তে আপনি procedural অথবা object-oriented (OO) পদ্ধতি দুটি ব্যবহার করতে পারেন।
    • উদাহরণস্বরূপ:
      • Procedural:

        $conn = mysqli_connect($host, $user, $password, $dbname);
        
      • Object-Oriented:

        $conn = new mysqli($host, $user, $password, $dbname);
        
  • PDO:
    • PDO তে শুধুমাত্র object-oriented পদ্ধতি ব্যবহার করা হয়। এটি সম্পূর্ণভাবে অবজেক্ট-ওরিয়েন্টেড ডিজাইনের উপর নির্ভরশীল।
    • উদাহরণ:

      $pdo = new PDO("mysql:host=$host;dbname=$dbname", $user, $password);
      

3. Prepared Statements (প্রিপেয়ারড স্টেটমেন্টস)

  • MySQLi:
    • MySQLi তে prepared statements সরাসরি সাপোর্ট করে এবং এটি parameterized queries ব্যবহার করে SQL injection থেকে রক্ষা করে।
    • উদাহরণ:

      $stmt = $conn->prepare("SELECT * FROM users WHERE username = ?");
      $stmt->bind_param("s", $username);
      $stmt->execute();
      
  • PDO:
    • PDO তেও prepared statements সাপোর্ট রয়েছে, তবে PDO তে এটি আরো বেশি ডাটাবেসের জন্য ইউনিভার্সাল এবং সাধারণভাবে ব্যবহৃত হয়।
    • উদাহরণ:

      $stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
      $stmt->bindParam(':username', $username);
      $stmt->execute();
      

4. ফিচার সমর্থন

  • MySQLi:
    • MySQLi তে transaction handling, multi-queries, এবং stored procedures এর সমর্থন রয়েছে।
    • উদাহরণ:

      $conn->begin_transaction();
      // execute queries
      $conn->commit();
      
  • PDO:
    • PDO তেও transaction handling সমর্থন রয়েছে, তবে এটি একাধিক ডাটাবেস সিস্টেমের জন্য সমানভাবে কাজ করে।
    • উদাহরণ:

      $pdo->beginTransaction();
      // execute queries
      $pdo->commit();
      

5. ডাটাবেস কানেকশন এবং সিকিউরিটি

  • MySQLi:
    • MySQLi শুধুমাত্র MySQL ডাটাবেস সিস্টেমের জন্য প্রস্তুত, এবং এতে ডাটাবেসের নিরাপত্তা জন্য SSL connection এবং client-side certificates সাপোর্ট রয়েছে।
  • PDO:
    • PDO বিভিন্ন ডাটাবেস সিস্টেমের জন্য কাজ করে, এবং এতে prepared statements ব্যবহার করার মাধ্যমে সিকিউরিটি নিশ্চিত করা যায়।
    • SSL connection এবং অন্যান্য নিরাপত্তা ফিচার সমর্থন করে, তবে সেগুলো ডাটাবেসের উপর নির্ভরশীল।

6. Error Handling (ত্রুটি ব্যবস্থাপনা)

  • MySQLi:
    • MySQLi তে ত্রুটি পরিচালনা করার জন্য mysqli_report() এবং try-catch ব্লক ব্যবহার করা যায়।
    • উদাহরণ:

      mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
      
  • PDO:
    • PDO তে ত্রুটি ব্যবস্থাপনার জন্য exception handling ব্যবহৃত হয়, এবং এটি try-catch ব্লক ব্যবহার করে।
    • উদাহরণ:

      try {
          $pdo = new PDO("mysql:host=$host;dbname=$dbname", $user, $password);
      } catch (PDOException $e) {
          echo 'Connection failed: ' . $e->getMessage();
      }
      

7. পারফরম্যান্স

  • MySQLi:
    • MySQLi সাধারণত MySQL ডাটাবেসের সাথে কাজ করার জন্য উন্নত পারফরম্যান্স প্রদান করে, কারণ এটি শুধুমাত্র MySQL এর জন্য তৈরি।
    • এটি ডাটাবেসের সাথে সরাসরি কানেকশন স্থাপন এবং পরিচালনা করতে দ্রুত এবং কার্যকরী।
  • PDO:
    • PDO বহুবিধ ডাটাবেস সিস্টেমের জন্য কাজ করে, তবে এর কিছু পারফরম্যান্স একটু কম হতে পারে, কারণ এটি ডাটাবেসের প্রতি নির্দিষ্ট নয় এবং সাধারণভাবে ব্যবহার করা হয়।

8. ডাটাবেস সিস্টেমের মধ্যে ট্রান্সফারযোগ্যতা

  • MySQLi:
    • MySQLi শুধুমাত্র MySQL ডাটাবেসের জন্য তৈরি হওয়ায়, একে অন্য ডাটাবেস সিস্টেমে স্থানান্তর করা সম্ভব নয়।
  • PDO:
    • PDO একাধিক ডাটাবেস সিস্টেম সমর্থন করে, তাই যখন ডাটাবেস পরিবর্তন করতে হয় (যেমন, MySQL থেকে PostgreSQL এ পরিবর্তন), তখন এটি সহজে স্থানান্তর করা যায়।

সারাংশ

  • MySQLi:
    • শুধুমাত্র MySQL ডাটাবেসের জন্য উপযুক্ত।
    • Procedural এবং Object-Oriented পদ্ধতি সমর্থন করে।
    • Prepared Statements এবং transactions সাপোর্ট করে।
    • MySQLi ব্যবহার করার সময় আপনি শুধু MySQL ডাটাবেসের সঙ্গে কাজ করবেন, এবং এটি দ্রুত এবং কার্যকর।
  • PDO:
    • Multiple databases সমর্থন করে, যেমন MySQL, PostgreSQL, SQLite, Oracle, ইত্যাদি।
    • শুধুমাত্র Object-Oriented পদ্ধতি সমর্থন করে।
    • Prepared Statements এবং transactions সমর্থন করে, তবে এটি একাধিক ডাটাবেস সিস্টেমের জন্য তৈরি এবং এর পারফরম্যান্স কিছুটা কম হতে পারে।

আপনার প্রয়োজনে যদি একাধিক ডাটাবেস সিস্টেম ব্যবহার করতে হয়, তবে PDO সবচেয়ে ভালো অপশন হতে পারে, কিন্তু যদি আপনি শুধুমাত্র MySQL ডাটাবেসের সাথে কাজ করেন, তবে MySQLi একটি দুর্দান্ত বিকল্প হতে পারে।

Content added By

MySQLi (MySQL Improved) এক্সটেনশন PHP ডেভেলপারদের জন্য একটি শক্তিশালী উপকরণ যা MySQL ডেটাবেসের সাথে যোগাযোগ করতে ব্যবহৃত হয়। ডেটাবেস কানেকশন তৈরি করার জন্য MySQLi দুটি পদ্ধতি সমর্থন করে: Object-Oriented এবং Procedural। এই দুইটি পদ্ধতিতেই একই ফাংশনালিটি পাওয়া যায়, তবে ব্যবহারকারীর পছন্দ অনুযায়ী পদ্ধতি বেছে নেওয়া যায়।


1. Object-Oriented পদ্ধতিতে কানেকশন তৈরি

MySQLi এর Object-Oriented পদ্ধতিতে ডেটাবেস কানেকশন তৈরি করা সহজ এবং কোডের পুনঃব্যবহারযোগ্যতা বাড়ায়। এই পদ্ধতিতে, একটি নতুন mysqli অবজেক্ট তৈরি করা হয় এবং সেটির মাধ্যমে ডেটাবেস কানেকশন পরিচালনা করা হয়।

উদাহরণ:

<?php
$servername = "localhost";  // সার্ভারের নাম
$username = "username";     // ইউজারনেম
$password = "password";     // পাসওয়ার্ড
$dbname = "database_name";  // ডেটাবেসের নাম

// Object-Oriented পদ্ধতিতে কানেকশন তৈরি
$conn = new mysqli($servername, $username, $password, $dbname);

// কানেকশন সফল না হলে এরর বার্তা দেখানো
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

echo "Connected successfully!";
?>

কানেকশন প্যারামিটার:

  • $servername: ডেটাবেস সার্ভারের হোস্ট নাম (যেমন, "localhost" বা IP ঠিকানা)
  • $username: MySQL ইউজারনেম
  • $password: MySQL পাসওয়ার্ড
  • $dbname: ডেটাবেসের নাম

2. Procedural পদ্ধতিতে কানেকশন তৈরি

Procedural পদ্ধতিতে, mysqli_connect() ফাংশন ব্যবহার করে ডেটাবেস কানেকশন তৈরি করা হয়। এই পদ্ধতিটি সহজ এবং সরাসরি, তবে Object-Oriented পদ্ধতির তুলনায় কম ফিচার সম্পন্ন।

উদাহরণ:

<?php
$servername = "localhost";  // সার্ভারের নাম
$username = "username";     // ইউজারনেম
$password = "password";     // পাসওয়ার্ড
$dbname = "database_name";  // ডেটাবেসের নাম

// Procedural পদ্ধতিতে কানেকশন তৈরি
$conn = mysqli_connect($servername, $username, $password, $dbname);

// কানেকশন সফল না হলে এরর বার্তা দেখানো
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

echo "Connected successfully!";
?>

3. কানেকশন বন্ধ করা

কানেকশন বন্ধ করার জন্য close() মেথড বা mysqli_close() ফাংশন ব্যবহার করা যায়। এটি ডেটাবেস কানেকশনটি সঠিকভাবে বন্ধ করতে সাহায্য করে এবং সার্ভার রিসোর্স মুক্ত করে।

Object-Oriented পদ্ধতিতে কানেকশন বন্ধ করা:

$conn->close();

Procedural পদ্ধতিতে কানেকশন বন্ধ করা:

mysqli_close($conn);

সারাংশ

MySQLi দিয়ে ডেটাবেস কানেকশন তৈরি করা দুটি প্রধান পদ্ধতি অনুসরণ করে: Object-Oriented এবং Procedural। দুইটি পদ্ধতিই কার্যকর, তবে Object-Oriented পদ্ধতিতে কোডের পুনঃব্যবহারযোগ্যতা এবং ব্যতিক্রমী পরিস্থিতি পরিচালনা (Error Handling) আরও সুবিধাজনক হয়। ডেটাবেস কানেকশন সঠিকভাবে পরিচালনা করা এবং বন্ধ করা নিশ্চিত করা প্রয়োজন, যাতে সার্ভারের রিসোর্স অপচয় না হয় এবং ডেটাবেসের নিরাপত্তা বজায় থাকে।


Content added By
Promotion

Are you sure to start over?

Loading...