MySQLi (MySQL Improved Extension) একটি উন্নত PHP এক্সটেনশন যা MySQL ডাটাবেসের সাথে যোগাযোগের জন্য ব্যবহৃত হয়। এটি মূলত MySQL-এর আগের সংস্করণের তুলনায় দ্রুত এবং নিরাপদ। সঠিকভাবে কুয়েরি লেখা MySQLi ব্যবহারে ডাটাবেসের পারফরম্যান্স উন্নত করতে সহায়ক হতে পারে।
MySQLi-তে Prepared Statements ব্যবহার করা
Prepared statements (প্রিপেয়ারড স্টেটমেন্টস) ব্যবহার করলে SQL ইনজেকশন থেকে সুরক্ষা পাওয়া যায় এবং কুয়েরি এক্সিকিউশন দ্রুত হয়। এতে প্রথমে কুয়েরি স্ট্রাকচার ডাটাবেসে পাঠানো হয়, তারপর পরবর্তী সময়ে এর মান (parameters) পরিবর্তন করা হয়। এই পদ্ধতি নিরাপদ এবং কার্যকর।
উদাহরণ:
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
$stmt = $mysqli->prepare("SELECT * FROM users WHERE email = ?");
$stmt->bind_param("s", $email);
$email = "example@example.com";
$stmt->execute();
$stmt->close();
$mysqli->close();
?>
এখানে, ? (question mark) হল প্লেসহোল্ডার, যা পরে bind_param() ফাংশন দিয়ে ডাইনামিকালি মান অ্যাসাইন করা হয়।
MySQLi-তে Error Handling
MySQLi-এর একটি সুবিধা হলো এর এর্ন হ্যান্ডলিং (Error Handling) সিস্টেম। এটি কুয়েরি বা ডাটাবেস সংযোগের সময় যেকোনো সমস্যা সহজে ট্র্যাক করা যায়।
উদাহরণ:
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
$result = $mysqli->query("SELECT * FROM non_existent_table");
if (!$result) {
die("Query failed: " . $mysqli->error);
}
?>
এখানে, যদি কোনো কুয়েরি ভুল হয় বা কোনো টেবিল না থাকে, তাহলে ত্রুটির বার্তা দেখানো হবে।
MySQLi-তে Multiple Queries Execution
একাধিক কুয়েরি একযোগে চালানো MySQLi-তে সম্ভব। এটি কার্যকর হতে পারে যখন একাধিক SQL কুয়েরি একসঙ্গে রান করতে হয়, তবে সেক্ষেত্রে SQL ইনজেকশন থেকে সুরক্ষা নিশ্চিত করা প্রয়োজন।
উদাহরণ:
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
$sql = "INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com');";
$sql .= "UPDATE users SET email = 'johnnew@example.com' WHERE name = 'John Doe';";
if ($mysqli->multi_query($sql)) {
do {
// প্রাথমিক ফলাফল প্রক্রিয়া করুন (যদি প্রয়োজন হয়)
} while ($mysqli->next_result());
} else {
echo "Error: " . $mysqli->error;
}
$mysqli->close();
?>
এখানে, multi_query() ব্যবহৃত হয়েছে একাধিক কুয়েরি একযোগে এক্সিকিউট করার জন্য।
MySQLi-তে Transactions ব্যবহারের কৌশল
ডাটাবেসে একাধিক অপারেশন একযোগে করার সময় টানজেকশন (Transaction) ব্যবহারের মাধ্যমে আপনি পুরো অপারেশনটি একত্রে এক্সিকিউট করতে পারেন। এটি ডাটা ইন্টিগ্রিটি নিশ্চিত করতে সাহায্য করে। একাধিক কুয়েরি চালানোর পর যদি কোনো একটি কুয়েরি ব্যর্থ হয়, তবে পুরো ট্রানজেকশন রোলব্যাক করা হয়।
উদাহরণ:
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
$mysqli->begin_transaction();
try {
$mysqli->query("INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com')");
$mysqli->query("INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com')");
$mysqli->commit();
} catch (Exception $e) {
$mysqli->rollback();
echo "Failed to complete transaction: " . $e->getMessage();
}
$mysqli->close();
?>
এখানে, begin_transaction() শুরুতে ট্রানজেকশন শুরু করে এবং commit() সফল হলে সমস্ত পরিবর্তন সেভ হয়। যদি কোনো সমস্যা হয়, rollback() দিয়ে পূর্বের অবস্থায় ফিরে আসা হয়।
MySQLi-তে Query Optimization
কার্যকর কুয়েরি লেখার সময় পারফরম্যান্সের দিকেও নজর দেওয়া জরুরি। এখানে কিছু সাধারণ কৌশল দেওয়া হলো:
- Indexing (ইন্ডেক্সিং): টেবিলের যেসব কলাম বেশি সার্চ করা হয়, সেগুলোর জন্য ইনডেক্স ব্যবহার করুন।
- Limit and Pagination (লিমিট এবং পেজিনেশন): একবারে অনেক ডাটা ফেচ না করে, ছোট ছোট অংশে ডাটা নিয়ে আসুন।
- Avoid SELECT * (SELECT * পরিহার করুন): প্রয়োজনীয় ফিল্ডগুলো বিশেষভাবে সিলেক্ট করুন, এতে ডাটাবেসের রিসোর্স বাঁচবে।
উদাহরণ:
<?php
$query = "SELECT name, email FROM users WHERE status = 'active' LIMIT 10";
$result = $mysqli->query($query);
?>
এখানে, শুধুমাত্র প্রয়োজনীয় কলাম সিলেক্ট করা হয়েছে এবং ডাটার পরিমাণও সীমাবদ্ধ করা হয়েছে।
MySQLi-তে কুয়েরি লেখার কৌশলগুলো যদি সঠিকভাবে অনুসরণ করা হয়, তবে ডাটাবেসের পারফরম্যান্স এবং সিকিউরিটি উভয়ই উন্নত হবে।