১. MySQLi কী?
MySQLi (MySQL Improved) হল একটি PHP এক্সটেনশন যা MySQL ডেটাবেজের সাথে কাজ করার জন্য উন্নত ও কার্যকরী এক ইন্টারফেস প্রদান করে। এটি পূর্ববর্তী MySQL এক্সটেনশনের চেয়ে আরও অনেক উন্নত বৈশিষ্ট্য, সিকিউরিটি এবং পারফরম্যান্স প্রদান করে। MySQLi এক্সটেনশন দুটি প্রধান মোডে কাজ করে:
- Procedural Mode: এখানে ফাংশনাল প্রোগ্রামিং স্টাইল ব্যবহার করা হয়।
- Object-Oriented Mode: এখানে অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং স্টাইল ব্যবহার করা হয়।
২. MySQLi এর প্রয়োজনীয়তা
MySQLi এক্সটেনশনটির ব্যবহারের প্রয়োজনীয়তা অনেক কারণে গুরুত্বপূর্ণ, বিশেষ করে PHP এবং MySQL ডেটাবেজের মধ্যে কার্যকরী সংযোগ স্থাপন এবং ব্যবস্থাপনা নিশ্চিত করার জন্য:
২.১ সিকিউরিটি
MySQLi SQL ইনজেকশন (SQL Injection) আক্রমণের প্রতিরোধে একটি শক্তিশালী সুরক্ষা ব্যবস্থা সরবরাহ করে। এটি prepared statements এবং parameterized queries সমর্থন করে, যার মাধ্যমে ব্যবহারকারীর ইনপুট ভ্যালিডেশন ও সুরক্ষা নিশ্চিত করা যায়।
২.২ পারফরম্যান্স
MySQLi ডেটাবেজের সাথে দ্রুত ও কার্যকরী যোগাযোগ স্থাপন করতে সাহায্য করে, কারণ এটি persistent connection এবং multiple statements সমর্থন করে। এর ফলে, ডেটাবেজের সঠিক কুয়েরি দ্রুত সম্পন্ন হয় এবং সার্ভারের পারফরম্যান্স উন্নত হয়।
২.৩ ডেটাবেজের সাথে উন্নত ইন্টারঅ্যাকশন
MySQLi transaction support, stored procedures, multiple queries এবং bind parameters এর মতো বেশ কিছু উন্নত বৈশিষ্ট্য সমর্থন করে, যা MySQL ডেটাবেজের সাথে কাজকে আরও কার্যকরী এবং নমনীয় করে তোলে।
২.৪ এবং আরও অনেক কিছু
MySQLi বিভিন্ন নতুন বৈশিষ্ট্য যেমন Asynchronous Queries, Prepared Statements, Error Reporting, এবং Result Set Caching প্রদান করে, যা ডেভেলপারদের কাজ আরও সহজ এবং দ্রুত করে।
৩. MySQLi এর ব্যবহার ক্ষেত্র
MySQLi এর বিভিন্ন ব্যবহার ক্ষেত্র রয়েছে, যেগুলোর মাধ্যমে PHP ডেভেলপাররা ডেটাবেজের সাথে যোগাযোগ এবং ডেটা ম্যানিপুলেশন সহজে করতে পারেন।
৩.১ ডেটাবেজ সংযোগ স্থাপন
MySQLi ডেটাবেজের সাথে সংযোগ স্থাপন করার জন্য খুবই সহজ এবং কার্যকর উপায় প্রদান করে। নিচে একটি সাধারণ সংযোগ উদাহরণ দেখানো হলো:
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database";
// MySQLi connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
৩.২ Prepared Statements এবং SQL Injection প্রতিরোধ
SQL ইনজেকশন থেকে রক্ষা পেতে MySQLi Prepared Statements ব্যবহার করা অত্যন্ত গুরুত্বপূর্ণ। এটি ডেটাবেজের সুরক্ষায় গুরুত্বপূর্ণ ভূমিকা পালন করে। নিচে একটি উদাহরণ দেওয়া হলো:
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $username, $password); // 'ss' denotes the type of the parameters (string, string)
$username = $_POST['username'];
$password = $_POST['password'];
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
// User found
echo "Login successful";
} else {
// User not found
echo "Invalid username or password";
}
৩.৩ Multiple Queries একসাথে চালানো
MySQLi একাধিক কুয়েরি একসাথে চালানোর জন্যও সমর্থন করে। এতে একটি কোড ব্লকে একাধিক ডেটাবেজ অপারেশন করা যেতে পারে।
$query1 = "INSERT INTO users (username, password) VALUES ('user1', 'pass1')";
$query2 = "UPDATE users SET password = 'newpass' WHERE username = 'user1'";
// Multiple queries
if ($conn->multi_query($query1 . ";" . $query2)) {
echo "Queries executed successfully";
} else {
echo "Error executing queries: " . $conn->error;
}
৩.৪ ট্রানজেকশন ব্যবস্থাপনা
MySQLi ট্রানজেকশন ব্যবস্থাপনা সমর্থন করে, যার মাধ্যমে আপনি একাধিক ডেটাবেজ অপারেশন একসাথে সফলভাবে সম্পাদন করতে পারেন।
$conn->begin_transaction();
try {
$conn->query("INSERT INTO users (username, password) VALUES ('user2', 'pass2')");
$conn->query("UPDATE users SET password = 'newpass2' WHERE username = 'user2'");
$conn->commit(); // Commit the transaction
echo "Transaction successful";
} catch (Exception $e) {
$conn->rollback(); // Rollback the transaction on error
echo "Transaction failed: " . $e->getMessage();
}
৩.৫ স্টোরড প্রসিডিউর ব্যবহার
MySQLi স্টোরড প্রসিডিউর সমর্থন করে, যা ডেটাবেজের স্টোর করা ফাংশন বা প্রসিডিউরগুলির মাধ্যমে কমপ্লেক্স অপারেশনগুলি সম্পাদন করতে সহায়তা করে।
$stmt = $conn->prepare("CALL GetUserDetails(?)");
$stmt->bind_param("i", $user_id); // Bind the user_id parameter
$user_id = 1;
$stmt->execute();
$result = $stmt->get_result();
৩.৬ Asynchronous Queries
MySQLi এর asynchronous query বৈশিষ্ট্য ব্যবহার করে আপনি একযোগভাবে একাধিক কুয়েরি চালাতে পারেন, যা অ্যাপ্লিকেশন পারফরম্যান্সে বড় ভূমিকা রাখে।
$conn->query("SELECT * FROM users", MYSQLI_ASYNC);
// Do other tasks while query runs
$queries = array($conn);
$results = mysqli_poll($queries, $errors, $reject, 1);
MySQLi (MySQL Improved) PHP ডেভেলপারদের জন্য একটি অত্যন্ত শক্তিশালী এবং কার্যকরী এক্সটেনশন যা MySQL ডেটাবেজের সাথে যোগাযোগের জন্য ব্যবহৃত হয়। এটি সিকিউরিটি, পারফরম্যান্স এবং উন্নত ডেটাবেজ ইন্টারঅ্যাকশন সুবিধা প্রদান করে, যা অ্যাপ্লিকেশনের কার্যকারিতা এবং স্কেলেবিলিটি বৃদ্ধি করে। Prepared Statements, ট্রানজেকশন, স্টোরড প্রসিডিউর, এবং Asynchronous Queries এর মতো বৈশিষ্ট্যগুলি MySQLi কে এক অত্যন্ত কার্যকরী টুল বানায় যা ডেভেলপারদের ডেটাবেজ পরিচালনার ক্ষেত্রে সাহায্য করে।