MySQLi তে Error Handling অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি ডাটাবেস সংক্রান্ত ত্রুটিগুলিকে সঠিকভাবে হ্যান্ডেল করতে সহায়তা করে। ত্রুটি সঠিকভাবে পরিচালনা করা না হলে অ্যাপ্লিকেশন ব্যর্থ হতে পারে অথবা নিরাপত্তা ঝুঁকি সৃষ্টি করতে পারে।
MySQLi তে Error Handling এর দুটি প্রধান পদ্ধতি আছে:
- Error Reporting (Error Reporting through Object-Oriented Method)
- Error Reporting (Error Reporting through Procedural Method)
এখানে দুটি পদ্ধতির মাধ্যমে ত্রুটি হ্যান্ডলিং এবং অন্যান্য গুরুত্বপূর্ণ বিষয়গুলি ব্যাখ্যা করা হয়েছে।
1. Error Handling with Object-Oriented Method
Object-Oriented পদ্ধতিতে, MySQLi এর object-oriented API ব্যবহার করে ত্রুটি হ্যান্ডল করা হয়। এর মাধ্যমে আপনি সহজেই কনেকশন বা কুয়েরি সংক্রান্ত ত্রুটিগুলি চেক করতে পারেন।
1.1 কনেকশন ত্রুটি হ্যান্ডলিং
যদি ডাটাবেস কানেকশন করতে কোনো ত্রুটি ঘটে, তবে এটি সনাক্ত করা এবং ব্যবহারকারীকে সতর্ক করা উচিত।
<?php
$host = "localhost"; // Database host
$user = "root"; // Database username
$password = ""; // Database password
$dbname = "test"; // Database name
// MySQLi connection using object-oriented method
$conn = new mysqli($host, $user, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} else {
echo "Connected successfully.";
}
?>
এখানে:
- $conn->connect_error: যদি কানেকশন তৈরি করতে কোনো সমস্যা হয়, তবে এটি ত্রুটির বার্তা প্রদান করবে।
- die(): ত্রুটি ঘটলে স্ক্রিপ্টের execution বন্ধ হয়ে যাবে এবং ত্রুটির বার্তা দেখানো হবে।
1.2 Query ত্রুটি হ্যান্ডলিং
MySQLi তে কুয়েরি এক্সিকিউট করার সময়ও ত্রুটি ঘটতে পারে। যেমন, সঠিক SQL সিনট্যাক্স না থাকলে বা কোনো অপর্যাপ্ত অনুমতি থাকলে ত্রুটি ঘটে।
<?php
// Sample query
$query = "SELECT * FROM non_existent_table"; // This table does not exist
// Execute query
$result = $conn->query($query);
if (!$result) {
die("Query failed: " . $conn->error);
} else {
echo "Query executed successfully.";
}
?>
এখানে:
- $conn->query($query): কুয়েরি এক্সিকিউট করে। যদি কোনো ত্রুটি ঘটে, তবে এটি false রিটার্ন করবে।
- $conn->error: ত্রুটির বার্তা প্রদান করে।
1.3 Prepared Statements ত্রুটি হ্যান্ডলিং
Prepared Statements ব্যবহার করার সময়ও ত্রুটি হ্যান্ডলিং গুরুত্বপূর্ণ। নিচে Prepared Statements এর জন্য ত্রুটি হ্যান্ডলিং দেখানো হলো:
<?php
// Prepared statement example
$stmt = $conn->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $id);
// Check if prepare statement failed
if (!$stmt) {
die("Preparation failed: " . $conn->error);
}
$id = 1;
$stmt->execute();
$result = $stmt->get_result();
if (!$result) {
die("Query failed: " . $conn->error);
}
while ($row = $result->fetch_assoc()) {
echo "User ID: " . $row['id'] . "<br>";
}
$stmt->close();
?>
এখানে:
- $conn->prepare(): Prepared Statement তৈরির সময় যদি কোনো ত্রুটি ঘটে, তা $conn->error দ্বারা চিহ্নিত করা হয়।
2. Error Handling with Procedural Method
Procedural পদ্ধতিতে MySQLi এর ফাংশন ব্যবহার করা হয়। এটি Object-Oriented পদ্ধতির মতোই কার্যকরী, কিন্তু এখানে ভিন্নভাবে ত্রুটি চেক করা হয়।
2.1 কনেকশন ত্রুটি হ্যান্ডলিং
<?php
$host = "localhost"; // Database host
$user = "root"; // Database username
$password = ""; // Database password
$dbname = "test"; // Database name
// MySQLi connection using procedural method
$conn = mysqli_connect($host, $user, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
} else {
echo "Connected successfully.";
}
?>
এখানে:
- mysqli_connect_error(): এটি কনেকশন ত্রুটির বার্তা প্রদান করে।
2.2 Query ত্রুটি হ্যান্ডলিং
<?php
$query = "SELECT * FROM non_existent_table"; // This table does not exist
// Execute query
$result = mysqli_query($conn, $query);
if (!$result) {
die("Query failed: " . mysqli_error($conn));
} else {
echo "Query executed successfully.";
}
?>
এখানে:
- mysqli_error($conn): কুয়েরি এক্সিকিউট করার সময় যদি কোনো ত্রুটি ঘটে, তবে এটি ত্রুটির বার্তা প্রদান করবে।
2.3 Prepared Statements ত্রুটি হ্যান্ডলিং
<?php
$query = "SELECT * FROM users WHERE id = ?";
$stmt = mysqli_prepare($conn, $query);
// Check if preparation failed
if (!$stmt) {
die("Preparation failed: " . mysqli_error($conn));
}
$id = 1;
mysqli_stmt_bind_param($stmt, "i", $id);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
if (!$result) {
die("Query failed: " . mysqli_error($conn));
}
while ($row = mysqli_fetch_assoc($result)) {
echo "User ID: " . $row['id'] . "<br>";
}
mysqli_stmt_close($stmt);
?>
এখানে:
- mysqli_prepare(): Prepared Statement তৈরির সময় ত্রুটি চেক করা হয়।
- mysqli_error($conn): ত্রুটি ঘটলে এই ফাংশনটি ত্রুটির বার্তা প্রদান করবে।
3. MySQLi তে Error Handling Best Practices
Error Logging: অ্যাপ্লিকেশন প্রোডাকশনে ত্রুটির বার্তা সরাসরি ব্যবহারকারীদের সামনে দেখানো উচিত নয়। এর পরিবর্তে, ত্রুটিগুলি লগ ফাইলে রেকর্ড করা উচিত। আপনি error_log() ফাংশন ব্যবহার করে ত্রুটিগুলি লগে সংরক্ষণ করতে পারেন।
উদাহরণ:
if ($conn->connect_error) { error_log("Connection failed: " . $conn->connect_error, 3, "/var/log/php_errors.log"); die("Connection failed. Please try again later."); }- User-friendly Error Messages: ব্যবহারকারীকে অতিরিক্ত প্রযুক্তিগত তথ্য না দিয়ে সাদামাটা ত্রুটি বার্তা দেখানো উচিত।
- Prepared Statements: SQL injection রোধ করতে সবসময় prepared statements ব্যবহার করুন।
- Exception Handling: যদি আরও উন্নত ত্রুটি হ্যান্ডলিং দরকার হয়, তবে আপনি try-catch ব্লক ব্যবহার করতে পারেন, তবে এটি mysqli এর জন্য সরাসরি সমর্থিত নয়। তবে, আপনি
mysqli_report()ফাংশন দিয়ে ত্রুটি ফ্যাচিংয়ে একটি এক্সপেকশন কুয়েরি মেকানিজম ব্যবহার করতে পারেন।
সারাংশ
MySQLi তে ত্রুটি হ্যান্ডলিং অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি ডাটাবেস সংক্রান্ত সমস্যা বা ত্রুটি চিহ্নিত করে অ্যাপ্লিকেশনকে সঠিকভাবে পরিচালিত রাখতে সহায়তা করে। Object-oriented এবং procedural পদ্ধতিতে ত্রুটি হ্যান্ডলিংয়ের আলাদা পদ্ধতি রয়েছে, তবে কোন পদ্ধতি ব্যবহার করলেও সঠিক ত্রুটি বার্তা প্রদান এবং নিরাপত্তা নিশ্চিতকরণ আবশ্যক।
MySQLi ব্যবহার করার সময় কিছু সাধারণ ত্রুটি (errors) হতে পারে। এই ত্রুটিগুলি ডেটাবেস কানেকশন, কোয়েরি এক্সিকিউশন, অথবা ডেটা রিট্রিভাল সম্পর্কিত হতে পারে। এখানে কিছু সাধারণ ত্রুটি এবং তাদের সমাধান আলোচনা করা হলো।
1. Connection Failure (কানেকশন ব্যর্থতা)
ত্রুটি:
Warning: mysqli_connect(): (HY000/1045): Access denied for user 'username'@'localhost' (using password: YES)
কারণ:
- ডেটাবেস সার্ভারের ঠিকানা, ইউজারনেম, অথবা পাসওয়ার্ড ভুল হতে পারে।
- ডেটাবেস সার্ভারটি চলছে না বা কানেকশন সীমা পৌঁছেছে।
সমাধান:
- কানেকশন প্যারামিটার চেক করুন: ইউজারনেম, পাসওয়ার্ড, এবং ডেটাবেস নাম সঠিক কিনা তা নিশ্চিত করুন।
- ডেটাবেস সার্ভার চেক করুন: নিশ্চিত করুন যে MySQL সার্ভার চলছে এবং সঠিক পোর্টে কানেক্ট করা হচ্ছে।
- ডেটাবেস ইউজার পেসমিশন চেক করুন: ইউজারের কাছে যথাযথ পেসমিশন আছে কিনা, যেমন:
GRANT ALL PRIVILEGES.
কোড উদাহরণ:
$conn = new mysqli('localhost', 'root', 'password', 'database_name');
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
2. Query Syntax Error (কোয়েরি সিনট্যাক্স ত্রুটি)
ত্রুটি:
Warning: mysqli_query(): (HY000/1064): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
কারণ:
- SQL কোয়েরির মধ্যে সঠিক সিনট্যাক্স নেই।
- একটি ভুল বা অনুপস্থিত SQL কমান্ড (যেমন, ভুলভাবে লেখা
SELECT,INSERTস্টেটমেন্ট)।
সমাধান:
- SQL কোয়েরি চেক করুন: SQL কোয়েরি সঠিকভাবে লেখা হয়েছে কিনা তা পরীক্ষা করুন।
- PHP ভেরিয়েবল পরীক্ষা করুন: যদি PHP ভেরিয়েবল ব্যবহার করে SQL কোয়েরি তৈরি করা হয়, তবে নিশ্চিত করুন যে ভেরিয়েবল সঠিকভাবে ইকুয়াল বা ইনপুট দেওয়া হয়েছে।
কোড উদাহরণ:
$sql = "SELECT * FROM users"; // সঠিক কোয়েরি
if (!$conn->query($sql)) {
echo "Error: " . $conn->error;
}
3. Incorrect Number of Parameters (অনুমানিত প্যারামিটার সংখ্যা)
ত্রুটি:
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters in prepared statement
কারণ:
bind_param()ফাংশনে প্যারামিটার সংখ্যা এবং প্লেসহোল্ডারের সংখ্যা ম্যাচ করছে না।- ভুল ধরনের প্যারামিটার প্রদান করা হয়েছে (যেমন,
sবাiটাইপ উল্লেখ করা হয়নি বা অতিরিক্ত টাইপ দেওয়া হয়েছে)।
সমাধান:
- প্যারামিটার সংখ্যা চেক করুন:
bind_param()ফাংশনে প্যারামিটার সংখ্যা SQL স্টেটমেন্টে ব্যবহৃত প্লেসহোল্ডারের সংখ্যা অনুযায়ী নিশ্চিত করুন। - টাইপ কোড সঠিকভাবে ব্যবহার করুন:
s(string),i(integer),d(double) সঠিকভাবে ব্যবহার করতে হবে।
কোড উদাহরণ:
$stmt = $conn->prepare("INSERT INTO users (name, age) VALUES (?, ?)");
$stmt->bind_param("si", $name, $age); // "si" অর্থ string এবং integer
$stmt->execute();
4. Result Set Fetch Error (ফলাফল ফেচ ত্রুটি)
ত্রুটি:
Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given
কারণ:
- কোয়েরি এক্সিকিউট করা সফল হয়নি এবং
mysqli_query()ফাংশন একটি বুলিয়ান (false) রিটার্ন করেছে। - কোয়েরি সঠিকভাবে কাজ না করলে
mysqli_fetch_assoc()ত্রুটি তৈরি করে, কারণ এটি একটি ভ্যালিড রেজাল্ট সেটের জন্য অপেক্ষা করে।
সমাধান:
- কোয়েরি রেজাল্ট চেক করুন:
mysqli_query()ফাংশনের ফলাফল চেক করুন, এটি সত্যিই সফল হয়েছে কিনা তা নিশ্চিত করুন। - এrror handling: কোয়েরি এক্সিকিউট করার সময় ত্রুটি পরিচালনার জন্য সঠিক কোড যুক্ত করুন।
কোড উদাহরণ:
$result = $conn->query("SELECT * FROM users");
if ($result) {
while ($row = $result->fetch_assoc()) {
echo $row['name'];
}
} else {
echo "Query failed: " . $conn->error;
}
5. Unable to Set Character Set (চরিত্র সেট সেট করতে অক্ষম)
ত্রুটি:
Warning: mysqli_set_charset(): Charset 'utf8' not supported
কারণ:
- ডেটাবেসের জন্য নির্দিষ্ট চরিত্র সেট বা কোলেশন অনুপস্থিত বা সঠিকভাবে কনফিগার করা হয়নি।
সমাধান:
- চরিত্র সেট সঠিকভাবে সেট করুন: ডেটাবেসে UTF-8 বা অন্য চরিত্র সেট সঠিকভাবে কনফিগার করতে হবে।
- চরিত্র সেট সেট করা:
mysqli_set_charset()ফাংশন ব্যবহার করে সঠিক চরিত্র সেট সেট করুন।
কোড উদাহরণ:
$conn = new mysqli('localhost', 'root', 'password', 'database_name');
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$conn->set_charset("utf8"); // চরিত্র সেট সেট করা
6. Resource Leak (রিসোর্স লিক)
ত্রুটি:
- কোডের মধ্যে SQL স্টেটমেন্ট বা রেজাল্ট সেট সঠিকভাবে ফ্রি না করার কারণে রিসোর্স লিক হতে পারে।
সমাধান:
close()এবংfree()ফাংশন ব্যবহার করুন: প্রতিটিPreparedStatementবাResultSetএর পরেclose()বাfree()ফাংশন ব্যবহার করুন।
কোড উদাহরণ:
$stmt->close(); // Prepared Statement বন্ধ করা
$result->free(); // Result Set মুক্ত করা
$conn->close(); // কানেকশন বন্ধ করা
সারাংশ
MySQLi ব্যবহার করার সময় কিছু সাধারণ ত্রুটি ঘটতে পারে, তবে এগুলি সাধারণত সহজেই সমাধান করা যায়। সঠিকভাবে ডেটাবেস কানেকশন, কোয়েরি লেখার সময় সিনট্যাক্স এবং প্যারামিটার চেক করে এই ত্রুটিগুলি এড়ানো সম্ভব। এছাড়া, ত্রুটি পরিচালনা এবং রিসোর্স লিক থেকে বাঁচতে সবসময় সঠিকভাবে রিসোর্স ফ্রি করুন।
১. mysqli_error() এবং mysqli_errno() কী?
mysqli_error(): এই ফাংশনটি MySQLi এক্সটেনশনের সাথে যে কোনও কুয়েরি এক্সিকিউশন বা সংযোগের সময় ঘটানো ত্রুটি সম্পর্কে বিস্তারিত বার্তা প্রদান করে।mysqli_errno(): এই ফাংশনটি ত্রুটির কোড প্রদান করে, যা একটি নির্দিষ্ট ত্রুটির ধরণ চিহ্নিত করতে সাহায্য করে।
এই দুটি ফাংশন MySQLi ত্রুটি হ্যান্ডলিংয়ের জন্য ব্যবহার করা হয়, যা আপনাকে ডেটাবেজের সাথে সম্পর্কিত যে কোনও ত্রুটি নির্ধারণ এবং সমাধান করতে সাহায্য করে।
২. mysqli_error() ফাংশন ব্যবহার
mysqli_error() ফাংশনটি MySQLi সংযোগ অবজেক্টের সাথে যে কোনও ত্রুটি বার্তা রিটার্ন করে। এটি সাধারণত কোনো কুয়েরি এক্সিকিউট করার পরে ত্রুটি চেক করতে ব্যবহৃত হয়।
উদাহরণ:
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "testdb";
// সংযোগ স্থাপন
$conn = new mysqli($servername, $username, $password, $dbname);
// চেক করা যে সংযোগ সফল হয়েছে কিনা
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// একটি ভুল কুয়েরি চালানো (Syntax Error)
$sql = "SELECT * FORM users"; // ভুল "FORM" ব্যবহার করা হয়েছে
$result = $conn->query($sql);
// ত্রুটি চেক করা এবং প্রদর্শন
if (!$result) {
echo "Error: " . $conn->error; // mysqli_error() এর মাধ্যমে ত্রুটি বার্তা দেখা যাবে
}
$conn->close();
উপরে দেওয়া কোডে, mysqli_error() ত্রুটি বার্তা প্রিন্ট করবে, কারণ SQL কুয়েরির মধ্যে একটি টাইপো রয়েছে (FORM এর পরিবর্তে FROM হওয়া উচিত ছিল)।
৩. mysqli_errno() ফাংশন ব্যবহার
mysqli_errno() ফাংশনটি MySQLi ত্রুটির একটি নির্দিষ্ট ত্রুটি কোড রিটার্ন করে। এটি ত্রুটির সংখ্যা প্রদান করে, যা আপনি ত্রুটির ধরন চিহ্নিত করতে ব্যবহার করতে পারেন।
উদাহরণ:
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "testdb";
// সংযোগ স্থাপন
$conn = new mysqli($servername, $username, $password, $dbname);
// চেক করা যে সংযোগ সফল হয়েছে কিনা
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// একটি ভুল কুয়েরি চালানো (Syntax Error)
$sql = "SELECT * FORM users"; // ভুল "FORM" ব্যবহার করা হয়েছে
$result = $conn->query($sql);
// ত্রুটি চেক করা এবং ত্রুটি কোড দেখানো
if (!$result) {
echo "Error Code: " . $conn->errno; // mysqli_errno() এর মাধ্যমে ত্রুটি কোড
echo "<br>Error: " . $conn->error; // mysqli_error() এর মাধ্যমে ত্রুটি বার্তা
}
$conn->close();
এখানে, mysqli_errno() ত্রুটি কোড (যেমন 1064) প্রদান করবে, যা SQL সিনট্যাক্স ত্রুটির জন্য ব্যবহৃত একটি সাধারণ কোড।
৪. Common MySQL Error Codes
- 1064: Syntax Error (কুয়েরি সঠিকভাবে লেখা হয়নি)
- 1146: Table doesn’t exist (যে টেবিলটি মেনে নেওয়া হয়েছিল তা ডেটাবেজে উপস্থিত নেই)
- 1045: Access denied (এটি সংযোগ ত্রুটি, যেখানে ডেটাবেজে সংযোগ অনুমতি নেই)
৫. mysqli_error() এবং mysqli_errno() ব্যবহার করার সুবিধা
- ডিবাগিং সহজ: এই ফাংশনগুলো ব্যবহারের মাধ্যমে আপনি কুয়েরি এক্সিকিউশনের সময় হওয়া ত্রুটি দ্রুত সনাক্ত করতে পারবেন।
- ত্রুটির ধরন চিহ্নিত করা:
mysqli_errno()আপনাকে ত্রুটির সংখ্যা সরবরাহ করে, যা আপনাকে দ্রুত ত্রুটির ধরন চিহ্নিত করতে সাহায্য করে। - বহু ত্রুটি সনাক্তকরণ: আপনি যদি একাধিক কুয়েরি এক্সিকিউট করেন, তবে একে একে
mysqli_error()এবংmysqli_errno()ব্যবহার করে ত্রুটির ধরন জানতে পারবেন।
৬. উপসংহার
MySQLi ত্রুটি হ্যান্ডলিং সিস্টেমের অংশ হিসেবে mysqli_error() এবং mysqli_errno() ব্যবহার করা খুবই কার্যকর। আপনি যখন ডেটাবেজের সাথে কাজ করবেন, তখন এই ফাংশনগুলো ত্রুটি চিহ্নিতকরণ এবং সমাধানে গুরুত্বপূর্ণ ভূমিকা পালন করবে। এটি ডিবাগিং প্রক্রিয়াকে সহজ করে তোলে এবং আপনাকে ডেটাবেজ কুয়েরি এবং সংযোগের সময় যেকোনো ত্রুটি দ্রুত সনাক্ত করতে সহায়তা করবে।
MySQLi (MySQL Improved) ড্রাইভার ব্যবহার করে ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করার সময়, exception handling এবং custom error logs ব্যবহারের মাধ্যমে ত্রুটিগুলোর মোকাবিলা করা অত্যন্ত গুরুত্বপূর্ণ। সঠিকভাবে exception handling ব্যবহার করা হলে, অ্যাপ্লিকেশনের স্থিতিশীলতা বৃদ্ধি পায় এবং ডাটাবেসের ত্রুটিগুলো সহজে চিহ্নিত করা যায়।
MySQLi Exception Handling
PHP তে exception handling এর জন্য try-catch ব্লক ব্যবহার করা হয়। MySQLi-তে exception handling সঠিকভাবে ব্যবহারের জন্য, MySQLi ক্লাসের exception-কে enable করতে হয়। সাধারণত, MySQLi ড্রাইভার ত্রুটির ক্ষেত্রে warnings বা errors প্রদান করে, তবে exceptions ব্যবহারের মাধ্যমে এগুলোকে সহজে হ্যান্ডেল করা যায়।
MySQLi-তে exception handling চালু করতে নিচের মতো কোড ব্যবহার করা যেতে পারে:
<?php
mysqli_report(MYSQLI_REPORT_STRICT); // Exception reporting চালু করা
try {
$mysqli = new mysqli("localhost", "username", "password", "database_name");
// Connection error handling
if ($mysqli->connect_error) {
throw new Exception("Connection failed: " . $mysqli->connect_error);
}
// Query execution example
$result = $mysqli->query("SELECT * FROM users");
if (!$result) {
throw new Exception("Query failed: " . $mysqli->error);
}
// Process result if query is successful
while ($row = $result->fetch_assoc()) {
echo "User: " . $row['name'] . "<br>";
}
} catch (Exception $e) {
echo "Error: " . $e->getMessage(); // Exception message showing
} finally {
$mysqli->close();
}
?>
Exception Handling ব্যাখ্যা
- mysqli_report(MYSQLI_REPORT_STRICT):
mysqli_report(MYSQLI_REPORT_STRICT)কল করলে MySQLi ড্রাইভার exceptions throw করবে যখন কোনো সমস্যা ঘটে। এর ফলে ডাটাবেস সংক্রান্ত সব ধরনের ত্রুটি exceptions হিসেবে ধরা হবে, যাtry-catchব্লকে হ্যান্ডল করা যাবে। - Try-Catch Block:
tryব্লকের মধ্যে আপনি যে কোডটি রান করাতে চান তা লিখবেন। যদি কোনো exception ঘটে, তাহলে এটিcatchব্লকে চলে যাবে, এবং আপনি exception এর বার্তা বা ডিটেইলস পেতে পারবেন। - Throwing Exceptions:
throw new Exception()ব্যবহার করে, আপনি নিজের তৈরি ত্রুটিগুলোকেও exceptions হিসেবে থ্রো করতে পারেন। উদাহরণস্বরূপ, যদি কোনো কুয়েরি সফল না হয়, তাহলে আপনি একটি exception থ্রো করে ত্রুটির কারণ জানাতে পারেন।
Custom Error Logs
তথ্য এবং ডিবাগিংয়ের জন্য কাস্টম error logs রাখা খুবই কার্যকরী। আপনি যখন exception বা error পেতে পারেন, তখন সেই ত্রুটির তথ্য একটি error log ফাইলে সেভ করে রাখতে পারেন, যা পরবর্তীতে ডিবাগিং বা বিশ্লেষণের কাজে আসবে। PHP তে error logging খুব সহজে করা যায়।
<?php
mysqli_report(MYSQLI_REPORT_STRICT); // Exception reporting চালু করা
try {
$mysqli = new mysqli("localhost", "username", "password", "database_name");
// Connection error handling
if ($mysqli->connect_error) {
throw new Exception("Connection failed: " . $mysqli->connect_error);
}
// Query execution example
$result = $mysqli->query("SELECT * FROM users");
if (!$result) {
throw new Exception("Query failed: " . $mysqli->error);
}
} catch (Exception $e) {
// Custom error logging to a file
error_log("Error on " . date('Y-m-d H:i:s') . " - " . $e->getMessage() . "\n", 3, "error_log.txt");
echo "Error: " . $e->getMessage(); // Show the error to the user
} finally {
$mysqli->close();
}
?>
Custom Error Logs ব্যাখ্যা
- error_log() Function:
error_log()ফাংশন ব্যবহার করে আপনি error logs কাস্টম ফাইলে লিখতে পারেন। এখানে প্রথম প্যারামিটার হল ত্রুটির মেসেজ, দ্বিতীয় প্যারামিটার হল log level (এখানে3মানে হল ফাইল আউটপুট), এবং তৃতীয় প্যারামিটার হল log ফাইলের পাথ (এখানে"error_log.txt"ফাইলটি ব্যবহার করা হয়েছে)। - Timestamp: সাধারণত, আপনি error logs এ ত্রুটির সময় (timestamp) অন্তর্ভুক্ত করবেন, যাতে ত্রুটির সময়টি পর্যালোচনা করা সহজ হয়।
- Error Details: ত্রুটির বিস্তারিত তথ্য যেমন error message, file name, এবং line number ব্যবহার করে ডিবাগিং সহজ করা যেতে পারে। এটি বড় প্রজেক্টে ত্রুটি ট্র্যাক করার ক্ষেত্রে অত্যন্ত কার্যকর।
সারাংশ
MySQLi-তে exception handling ব্যবহারের মাধ্যমে ত্রুটিগুলোকে সঠিকভাবে হ্যান্ডল করা যায় এবং custom error logs এর মাধ্যমে সেই ত্রুটিগুলোর বিস্তারিত তথ্য সংরক্ষণ করা সম্ভব। exception handling ডেভেলপারকে ত্রুটি চিহ্নিত করতে এবং দ্রুত সমাধান বের করতে সহায়তা করে, এবং error logs ডিবাগিং এবং বিশ্লেষণ করতে সহায়ক। MySQLi ড্রাইভার ব্যবহার করার সময়, exception reporting এবং error logging টেকনিক্যাল ত্রুটি সমাধানে গুরুত্বপূর্ণ ভূমিকা পালন করে।
Read more