PHP ও MySQL হল ওয়েব ডেভেলপমেন্টে সবচেয়ে জনপ্রিয় এবং শক্তিশালী টুলস। PHP একটি সার্ভার-সাইড স্ক্রিপ্টিং ভাষা, যা ওয়েব পেজগুলি ডাইনামিকভাবে তৈরি করতে ব্যবহৃত হয়, এবং MySQL একটি জনপ্রিয় রিলেশনাল ডাটাবেস ম্যানেজমেন্ট সিস্টেম (RDBMS) যা ডেটা সংরক্ষণ এবং পরিচালনার জন্য ব্যবহৃত হয়। PHP এবং MySQL একে অপরের সাথে কাজ করে, যেখানে PHP ওয়েব পেজের লজিক পরিচালনা করে এবং MySQL ডাটাবেসে ডেটা সংরক্ষণ ও পুনরুদ্ধার করে।
PHP এবং MySQL এর মধ্যে সম্পর্ক:
- PHP ওয়েব পেজের সার্ভার-সাইড লজিক পরিচালনা করে, অর্থাৎ, ব্যবহারকারীর অনুরোধগুলি প্রক্রিয়া করে এবং ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করে।
- MySQL হল ডাটাবেস যা তথ্য সংরক্ষণ করে, যেমন ব্যবহারকারীর তথ্য, ব্লগ পোস্ট, পণ্য তথ্য, ইত্যাদি।
- PHP, MySQL-এর মাধ্যমে ডেটাবেসের সাথে যোগাযোগ করে এবং প্রাপ্ত তথ্যকে ওয়েব পেজে উপস্থাপন করে।
PHP এবং MySQL এর মাধ্যমে ডাটাবেস ইন্টারঅ্যাকশন:
PHP এবং MySQL এর মাধ্যমে ডাটাবেসে ডেটা ইনসার্ট, আপডেট, ডিলিট এবং সিলেক্ট করা সম্ভব। PHP-এ MySQL ডাটাবেসের সাথে যোগাযোগ করতে বিভিন্ন ফাংশন ব্যবহার করা হয়, যেমন mysqli বা PDO (PHP Data Objects)। এখানে mysqli এর উদাহরণ দেওয়া হলো।
MySQL এর সাথে PHP সংযোগ স্থাপন:
1. MySQLi (MySQL Improved) ব্যবহার করে সংযোগ স্থাপন:
MySQLi একটি উন্নত MySQL এক্সটেনশন যা PHP-এ MySQL ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করার জন্য ব্যবহৃত হয়।
connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
// ডাটাবেস বন্ধ করা
$conn->close();
?>
ব্যাখ্যা:
- $servername, $username, $password, $dbname: এখানে, ডাটাবেস সার্ভার, ব্যবহারকারীর নাম, পাসওয়ার্ড এবং ডাটাবেসের নাম নির্ধারণ করা হয়েছে।
new mysqli(): MySQLi এক্সটেনশন ব্যবহার করে ডাটাবেসে সংযোগ স্থাপন।$conn->connect_error: যদি সংযোগে কোনো ত্রুটি হয় তবে তা প্রদর্শন করবে।$conn->close(): কাজ শেষ হলে ডাটাবেস সংযোগ বন্ধ করা হয়।
2. MySQL ডেটাবেসে ডেটা ইনসার্ট করা:
connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// SQL কমান্ড
$sql = "INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com')";
// ডেটা ইনসার্ট করা
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "
" . $conn->error;
}
// ডাটাবেস বন্ধ করা
$conn->close();
?>
ব্যাখ্যা:
- INSERT INTO SQL কমান্ড ব্যবহার করে
usersটেবিলে নতুন রেকর্ড ইনসার্ট করা হয়েছে।nameএবংemailকলামে 'John Doe' এবং 'john@example.com' ডেটা ইনসার্ট করা হচ্ছে। - $conn->query($sql): SQL কমান্ডটি চালায় এবং যদি সফলভাবে ইনসার্ট হয়, তাহলে "New record created successfully" মেসেজ প্রদর্শিত হবে।
3. MySQL ডেটাবেস থেকে ডেটা সিলেক্ট করা:
connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// SQL কমান্ড
$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"]. "
";
}
} else {
echo "0 results";
}
// ডাটাবেস বন্ধ করা
$conn->close();
?>
ব্যাখ্যা:
- SELECT SQL কমান্ড ব্যবহার করে
usersটেবিল থেকেid,name, এবংemailকলাম থেকে ডেটা সিলেক্ট করা হয়েছে। - $result->fetch_assoc(): এই ফাংশনটি একে একে সব রেকর্ড আনে এবং তাদের গ্লোবাল অ্যারে আকারে প্রদর্শন করে।
4. MySQL ডেটাবেসে ডেটা আপডেট করা:
connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// SQL কমান্ড
$sql = "UPDATE users SET email='newemail@example.com' WHERE id=1";
// ডেটা আপডেট করা
if ($conn->query($sql) === TRUE) {
echo "Record updated successfully";
} else {
echo "Error: " . $sql . "
" . $conn->error;
}
// ডাটাবেস বন্ধ করা
$conn->close();
?>
ব্যাখ্যা:
- UPDATE SQL কমান্ড ব্যবহার করে
usersটেবিলেরemailকলামের মান পরিবর্তন করা হচ্ছে, যেখানেidসমান 1।
5. MySQL ডেটাবেস থেকে ডেটা ডিলিট করা:
connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// SQL কমান্ড
$sql = "DELETE FROM users WHERE id=1";
// ডেটা ডিলিট করা
if ($conn->query($sql) === TRUE) {
echo "Record deleted successfully";
} else {
echo "Error: " . $sql . "
" . $conn->error;
}
// ডাটাবেস বন্ধ করা
$conn->close();
?>
ব্যাখ্যা:
- DELETE SQL কমান্ড ব্যবহার করে
usersটেবিল থেকেidসমান 1 রেকর্ডটি মুছে ফেলা হয়েছে।
PDO (PHP Data Objects) ব্যবহার করে MySQL সংযোগ:
PDO হল PHP-এ ডাটাবেস সংযোগ এবং পরিচালনা করার জন্য একটি সাধারণ এবং শক্তিশালী উপায়। এটি একাধিক ডাটাবেস সিস্টেম (MySQL, PostgreSQL, SQLite) সমর্থন করে এবং আরও সুরক্ষিত এবং পরিষ্কার কোড প্রদান করে।
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// SQL কমান্ড
$stmt = $pdo->prepare("SELECT id, name, email FROM users");
$stmt->execute();
// ডেটা রিটার্ন করা
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. "
";
}
} catch(PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
?>
ব্যাখ্যা:
- PDO ব্যবহারে prepare() এবং execute() পদ্ধতি ব্যবহার করে SQL কমান্ড চালানো হয়।
- এটি আরও নিরাপদ এবং সুরক্ষিত, বিশেষত SQL Injection থেকে রক্ষা করতে সাহায্য করে।
সারসংক্ষেপ:
PHP এবং MySQL একে অপরের সাথে শক্তিশালীভাবে কাজ করে এবং ওয়েব অ্যাপ্লিকেশনগুলিতে ডেটা সংরক্ষণ, আপডেট, এবং পুনরুদ্ধারের জন্য ব্যবহার করা হয়। আপনি MySQLi বা PDO ব্যবহার করে ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করতে পারেন এবং CRUD (Create, Read, Update, Delete) অপারেশনগুলি সহজেই করতে পারেন।
পিএইচপির মাধ্যমে আপনি ডেটাবেজের সাথ সংযোগ তৈরি করে ডেটাবেজ পরিচালনা করতে পারেন। পিএইচপিতে ব্যবহৃত সবচেয়ে জনপ্রিয় ডেটাবেজ সিস্টেম হলো MySQL।
MySQL
MySQL হলো একটি ডেটাবেজ সিস্টেম যা ওয়েবের জন্য ব্যবহার করা হয়। এই ডেটাবেজ সিস্টেমটি একটি সার্ভারে চলে। এটি দ্রুততর, নির্ভরযোগ্য এবং খুব সহজেই ব্যবহার করা যায়। এটি ছোট এবং বড় যে কোনো অ্যাপ্লিকেশানের জন্য আদর্শ।
MySQL স্টান্ড্যার্ড SQL মেলে চলে। এটি বিভিন্ন প্ল্যাটফর্মে কম্পাইল করা যায়। আপনি এটি ফ্রি ডাউনলোড এবং ব্যবহার করতে পারবেন।
ওরাকল কর্পোরেশন MySQL ডেভেলপ করেছে এবং এটার সম্পূর্ণ সাপোর্ট তারাই দিয়ে থাকে। সহ-প্রতিষ্ঠাতা মন্টি উইডেনিয়াসের কন্যা "My" এর নামানুসারে MySQL নামকরন করা হয়।
MySQL ডেটাবেজে ডেটা সাধারণত টেবিলে জমা রাখা হয়। সুতরাং একটি টেবিল হলো সংশ্লিষ্ট তথ্যের সংগ্রহ যা সারি এবং কলাম নিয়ে গঠিত হয়।
শ্রেণীভিত্তিক তথ্য সংগ্রহ করে রখার জন্য ডেটাবেজ একটি উত্তম মাধ্যম। যেমন- একটি শিক্ষাপ্রতিষ্ঠানের ডেটাবেজে নিম্নের টেবিলগুলো থাকতে পারেঃ
- Student Attendance
- Student Details
- Student Result
- Teacher Details
- Etc...
পিএইচপি এবং MySQL ডেটাবেজ সিস্টেম
পিএইচপি এবং MySQL সকল প্লাটফর্মেই রান করানো যায়। যেমন- আপনি উইন্ডোজ, ইউনিক্স, ম্যাক ইত্যাদি প্ল্যাটফর্মের সার্ভারে পিএইচপি এবং MySQL ডেভেলপ করতে পারেন।
ডেটাবেজ কুয়েরি
কুয়েরি হচ্ছে একটি প্রশ্ন বা অনুরোধ। আমরা একটি ডেটাবেজ থেকে কুয়েরি করে যে কোনো তথ্য নিয়ে আসতে পারি।
নিম্নের কুয়েরিটি লক্ষ্য করুনঃ
kt_satt_skill_example_id=406
উপরের কুয়েরিটিতে স্ট্যান্ডার্ড SQL সিনট্যাক্স ব্যবহার করা হয়েছে। এটি "Teacher_details" টেবিলের "Teacher_name" কলামের সকল তথ্যকে সিলেক্ট করবে।
SQL সম্পর্কে বিস্তারিত জানতে আমাদের SQL টিউটোরিয়াল দেখুন।
ডাউনলোড MySQL ডেটাবেজ
আপনার নিকট যদি MySQL ডেটাবেজ সহ পিএইচপি সার্ভার যেমন- WAMP, LAMP, MAMP, XAMPP ইত্যাদির কোন একটি না থাকে, সেক্ষেত্রে আপনি এটি ফ্রিতে ডাউনলোড করতে পারবেন। ডাউনলোড করতে http://www.mysql.com লিংক এ ক্লিক করুনঃ
পিএইচপি ৫ এবং এর পরবর্তী যেকোনো ভার্সন নিম্নোক্ত এক্সটেনশন গুলোর মাধ্যমে MySQL ডেটাবেজ এর সাথে কাজ করতে সক্ষমঃ
- MySQLi extension
- PDO(PHP Data Objects)
পিএইচপি৫ এর পূর্ববর্তী ভার্সনসমূহ MySQL এক্সটেনশন ব্যবহার করতো। যাইহোক, ২০১২ সালে এই এক্সটেনশনটি বাতিল হয়ে যায়। বর্তমানে MySQL এর পরিবর্তে MySQLi এক্সটেনশন ব্যবহার করা হয়। এখানে অতিরিক্ত i এর পূর্ণরুপ হচ্ছে improved অর্থাৎ উন্নত।
MySQLi অথবা PDO আপনি কোনটা ব্যবহার করবেন?
আপনি যদি এই প্রশ্নের সংক্ষিপ্ত উত্তর পেতে চান তাহলে আমরা বলবো "আপনার যেটা খুশি ব্যবহার করতে পারেন"। কারন উভয়েরই বিভিন্ন উপকারিতা রয়েছেঃ
যাইহোক, PDO ১২টি ভিন্ন ভিন্ন ডেটাবেজ সিস্টেমে কাজ করতে সক্ষম হলেও MySQLi শুধুমাত্র MySQL ডেটাবেজে কাজ করে।
সুতরাং আপনি যদি আপনার প্রজেক্টের জন্য ডেটাবেজ পরিবর্তন করতে চান তাহলে PDO আপনার এই কাজটি অনেক সহজ করে দিবে। কেননা, এক্ষেত্রে আপনাকে শুধুমাত্র সংযোগ স্ট্রিং এবং কিছু কুয়েরি পরিবর্তন করতে হবে। কিন্তু MySQLi এর ক্ষেত্রে আপনাকে কুয়েরিসহ সকল কোড পুনরায় লিখতে হবে।
উভয় প্রক্রিয়া অব্জেক্ট অরিয়েন্টেড হলেও MySQLi প্রসিডিউরাল(procedural) API-ও অফারে করে।
উভয় এক্সটেনশন Prepared স্টেটমেন্ট সমর্থন করে। Prepared স্টেটমেন্ট SQL injection থেকে রক্ষা করে যা ওয়েব অ্যাপ্লিকেশনের নিরাপত্তার জন্য খুবই গুরুত্বপূর্ণ।
আমরা আমাদের টিউটোরিয়ালে নিম্নের প্রক্রিয়া দুটির মাধ্যমে পিএইচপি এবং MySQL নিয়ে কাজ করবোঃ
- MySQLi (object-oriented)
- MySQLi (procedural)
MySQL এর সাথে সংযোগ তৈরি
পিএইচপির মাধ্যমে আপনি যদি MySQL ডেটাবেজ থেকে ডেটা অ্যাক্সেস করতে চান তাহলে প্রথমেই আপনাকে সার্ভারের সাথে সংযোগ তৈরি করতে হবেঃ
নিম্নে MySQLi প্রসিডিউরাল এবং অবজেক্ট অরিয়েন্টেড উভয় প্রক্রিয়ায় সংযোগ তৈরি করে দেখানো হলোঃ
kt_satt_skill_example_id=413
kt_satt_skill_example_id=414
উপরের অব্জেক্ট-অরিয়েন্টেড উদাহরনের
$conn->connect_errorপ্রোপার্টিটি শুধুমাত্রে পিএইচপি ৫.২.৯ এবং ৫.৩.০ ভার্সনে ঠিকমত কাজ করে। এর পুর্বের ভার্সন গুলোতে সঠিকভাবে কাজ করাতে চাইলে নিম্নের কোড ব্যবহার করুনঃ
kt_satt_skill_example_id=415
সংযোগ বিচ্ছিন্ন
স্ক্রিপ্ট এক্সিকিউশন শেষ হওয়া মত্রাই স্বয়ংক্রিয়ভাবে সংযোগ বিচ্ছিন্ন হয়ে যায়। যাইহোক, স্ক্রিপ্ট শেষ হওয়ার পূর্বে আপনি যদি সংযোগ বিচ্ছিন্ন করতে চান তাহলে নিম্নের কোড ব্যবহার করুনঃ
kt_satt_skill_example_id=417
MySQLi অব্জেক্ট-অরিয়েন্টেড প্রক্রিয়ায় সংযোগ বিচ্ছিন্নঃ
kt_satt_skill_example_id=418
একটি ডেটাবেজ এক বা একাধিক টেবিল এর সমন্বয়ে গঠিত হয়। আপনি যদি MySQL ডেটাবেজে কোন ডেটাবেজ তৈরি করতে চান তাহলে আপনার ডেটাবেজ তৈরির(CREATE DATABASE) অগ্রাধিকার থাকতে হবে। অন্যথায় আপনি পিএইচপি কোড ব্যবহার করে ডেটাবেজ তৈরি করতে পারবেন না।
MySQLi ব্যবহার করে MySQL ডেটাবেজ তৈরি
MySQL এ কোনো ডেটাবেজ তৈরি করতে হলে CREATE DATABASE স্টেটমেন্ট ব্যবহার করতে হয়।
নিম্নে আমরা MySQLi প্রসিডিউরাল এবং অবজেক্ট অরিয়েন্টেড উভয় প্রক্রিয়ায় "testDB" নামে একটি ডেটাবেজ তৈরি করবোঃ
উদাহরণঃ MySQLi প্রসিডিউরাল প্রক্রিয়ায় "testDB" ডেটাবেজ তৈরিঃ
kt_satt_skill_example_id=420
উদাহরণঃ MySQLi অব্জেক্ট-অরিয়েন্টেড প্রক্রিয়ায় "testDB" ডেটাবেজ তৈরিঃ
kt_satt_skill_example_id=421
বিঃদ্রঃ আপনি যখন নতুন কোনো ডেটাবেজ তৈরি করবেন তখন আপনাকে mysqli অবজেক্ট এর প্রথম তিনটি আর্গুমেন্ট অবশ্যই নির্ধারণ করে দিতে হবে। যেমন-
('servername", "username", "password")।পরামর্শঃ কিন্তু আপনাকে যদি একটি নির্দিষ্ট পোর্ট(port) ব্যবহার করতে হয়, তবে সেক্ষেত্রে চতুর্থ আর্গুমেন্ট(database-name) হিসাবে ফাঁকা স্ট্রিং("") ব্যবহার করে পঞ্চম আর্গুমেন্টে পোর্টি(port) উল্লেখ করতে হবে। যেমনঃ
newmysqli("localhost","username","password","",port)
একটি ডেটাবেজে একাধিক টেবিল থাকতে পারে। প্রতিটি টেবিল এর একটি ইউনিক নাম থাকে এবং কলাম ও সারি নিয়ে গঠিত হয়।
MySQLi ব্যবহার করে MySQL টেবিল তৈরি
MySQL ডেটাবেজে একটি টেবিল তৈরির জন্য CREATE TABLE স্টেটমেন্ট ব্যবহার করা হয়।
নিম্নের উদাহরনে আমরা "testTB" নামে একটি টেবিল তৈরি করবো। যাতে ৫টি কলাম("id", "firstname", "lastname", "email" এবং "insert_date") থাকবেঃ
kt_satt_skill_example_id=425
উপরের টেবিলটি লক্ষ করুনঃ
ডেটা টাইপ গুলো নির্দেশ করছে কলাম গুলো কি ধরনের তথ্য সংরক্ষন করবে।
ডেটা টাইপ নির্ধারনের পর আপনি কলামের মধ্যে ঐচ্ছিক এট্রিবিউট গুলো নির্ধারন করে দিতে পারেনঃ
- NOT NULL - প্রতিটি সারি সংশ্লিষ্ট কলামের জন্য একটি ভ্যালু সংরক্ষন করবে। এক্ষেত্রে ফাঁকা(null) ভ্যালু গ্রহন যোগ্য নয়।
- DEFAULT value - একটি ডিফল্ট ভ্যালু নির্ধারন করে। যখন কলামে কোনো ভ্যালু নির্ধারন করা না হয় তখন কলাম ডিফল্ট ভ্যালুটি সংরক্ষন করবে।
- UNSIGNED - সংখ্যা টাইপের জন্য ব্যবহার করা হয়। কলামে সংরক্ষিত সংখ্যা-ভ্যালু গুলো শূন্য(০) অথবা যেকোন ধনাত্মক সংখ্যা হতে বাধ্য করে।
- AUTO INCREMENT - নতুন তথ্য সংযুক্ত হওয়ার সাথে সাথে MySQL স্বয়ংক্রিয়ভাবে ফিল্ডের ভ্যালু এক করে বৃদ্ধি করে।
- PRIMARY KEY - টেবিলের সারি গুলোকে স্বতন্ত্রভাবে চিহ্নিত করতে ব্যবহৃত হয়। বিশেষ করে আইডি সেট করতে বেশীরভাগ সময়ই
AUTO_INCREMENTএর সাথে এটি ব্যবহার করা হয়।
প্রতিটি টেবিলেই একটি PRIMARY KEY কলাম থাকা উচিৎ। এই টেবিলের ক্ষেত্রে "id" কলামটি PRIMARY KEY কলাম। টেবিলের প্রতিটি সারির জন্য এই কলামের ভ্যালু ইউনিক হতে হবে।
আমরা MySQLi প্রসিডিউরাল এবং অবজেক্ট অরিয়েন্টেড উভয় প্রক্রিয়ায় "testTB" নামে একটি MySQL টেবিল তৈরি করবোঃ
উদাহরণঃ MySQLi প্রসিডিউরাল প্রক্রিয়ায় "testTB" টেবিল তৈরি
kt_satt_skill_example_id=423
উদাহরণ MySQLi অব্জেক্ট-অরিয়েন্টেড প্রক্রিয়ায় "testTB" টেবিল তৈরি
kt_satt_skill_example_id=426
ডেটাবেজ এবং টেবিল তৈরির পরে আমরা টেবিলে তথ্য ইনপূট দেওয়া শুরু করতে পারি।
MySQLi ব্যবহার করে MySQL এ ডেটা ইনসার্ট করা
SQL INSERT INTO স্টেটমেন্ট ব্যবহার করে আমরা ডেটাবেজের টেবিলে নতুন তথ্য ইনসার্ট বা যোগ করতে পারিঃ
kt_satt_skill_example_id=430
SQL স্টেটমেন্ট ব্যবহার করে টেবিলে তথ্য ইনপুট দেওয়ার সময় কিছু করনীয়ঃ
- পিএইচপিতে SQL কুয়েরির কোড অবশ্যই উদ্ধৃতি চিহ্নের মধ্যে লিখতে হবে।
- SQL এর স্ট্রিং ভ্যালুগুলোও উদ্ধৃতি চিহ্নের মধ্যে লিখতে হবে।
- সাংখ্যা-ভ্যালুর ক্ষেত্রে উদ্ধৃতি চিহ্নের প্রয়োজন নাই।
- NULL শব্দের ক্ষেত্রেও উদ্ধৃতি চিহ্নের প্রয়োজন নাই।
SQL সম্মন্ধে আরও জানতে আমাদের SQL টিউটোরিয়াল দেখুন।
পূর্ববর্তী অধ্যায়ে আমরা "testTB" নামে একটি ফাঁকা টেবিল তৈরি করেছিলাম। যাতে ৫টি কলামঃ "id", "firstname", "lastname", "email" এবং "insert_date" ছিল। এখন আমরা INSERT INTO স্টেটমেন্ট ব্যবহার করে টেবিলটিতে তথ্য ইনসার্ট করবো।
সতর্কতাঃ আপনার টেবিলের
AUTO_INCREMENT(যেমনঃ "id") অথবাTIMESTAMP(যেমনঃ "insert_date") কলামগুলোর ভ্যালু আপনাকে SQL কুয়েরিতে নির্দিষ্ট করে দিতে হবে না। কারণ এই কলামগুলোতে স্বয়ংক্রিয়ভাবেই ভ্যালু যোগ হয়ে যাবে।
নিম্নে আমরা MySQLi প্রসিডিউরাল এবং অবজেক্ট অরিয়েন্টেড উভয় প্রক্রিয়ায় "testTB" টেবিলে একটি নতুন রেকর্ড ইনসার্ট করবোঃ
উদাহরণঃ MySQLi প্রসিডিউরাল প্রক্রিয়ায় "testTB" টেবিলে নতুন তথ্য ইনসার্ট
kt_satt_skill_example_id=431
উদাহরণঃ MySQLi অব্জেক্ট-অরিয়েন্টেড প্রক্রিয়ায় "testTB" টেবিলে নতুন তথ্য ইনসার্ট
kt_satt_skill_example_id=433
আমরা যদি AUTO_INCREMENT ফিল্ড যুক্ত কোনো টেবিলে তথ্য ইনসার্ট বা আপডেট করি তাহলে সর্বশেষ ইনসার্ট বা আপডেটকৃত তথ্যের আইডি তাৎক্ষণিকভাবে পাওয়া সম্ভব।
"testTB" টেবিলের মধ্যে "id" কলামটি AUTO_INCREMENT ফিল্ডঃ
kt_satt_skill_example_id=436
নিম্নের উদাহরন এবং পূর্বের পেজে ব্যবহৃত উদাহরন দুইটি পায় একইরকম। নিম্নের উদাহরনে শুধুমাত্র একটি নতুন লাইন সংযুক্ত করা হয়েছে। যা সর্বশেষ ইনসার্টকৃত তথ্যের আইডি রিটার্ন করে। এছাড়া এই উদাহরনের সাহায্যে আমরা সর্বশেষ আইডিটির আউটপুটও নিবঃ
উদাহরণঃ MySQLi প্রসিডিউরাল প্রক্রিয়ায় সর্বশেষ আইডি রিটার্ন নেওয়া
kt_satt_skill_example_id=438
উদাহরণঃ MySQLi অব্জেক্ট-অরিয়েন্টেড প্রক্রিয়ায় সর্বশেষ আইডি রিটার্ন নেওয়া
kt_satt_skill_example_id=440
MySQLi ব্যবহার করে MySQL এ একাধিক ডেটা ইনসার্ট
mysqli_multi_query() ফাংশন ব্যবহার করে একসাথে একাধিক SQL স্টেটমেন্ট সম্পাদন করা যায়।
নিম্নের উদাহরনে আমরা "testTB" টেবিলে তিনটি নতুন তথ্য ইনসার্ট করবোঃ
MySQLi প্রসিডিউরাল প্রক্রিয়ায় তিনটি নতুন তথ্য ইনসার্ট করাঃ
kt_satt_skill_example_id=448
উদাহরণঃ MySQLi অব্জেক্ট-অরিয়েন্টেড প্রক্রিয়ায় তিনটি নতুন তথ্য ইনসার্ট করাঃ
kt_satt_skill_example_id=450
সর্তকতাঃ প্রতিটি SQL স্টেটমেন্ট সেমিকোলন দ্বারা পৃথক করতে হবে।
SQL Injections প্রতিরোধে প্রিপেয়ার্ড স্টেটমেন্ট খুবই গুরুত্বপূর্ণ ভূমিকা পালন করে।
প্রিপেয়ার্ড স্টেটমেন্ট এবং আবদ্ধ(Bound) প্যারামিটার
প্রিপেয়ার্ড স্টেটমেন্ট এমন একটি বৈশিষ্ট্য যা সর্বোচ্চ দক্ষতার সাথে একই বা অনুরূপ SQL স্টেটমেন্টগুলোকে বার বার সম্পাদন করতে পারে।
প্রিপেয়ার্ড স্টেটমেন্ট এর কাজের ধারাঃ
- একটি SQL স্টেটমেন্টের টেমপ্লেট তৈরি করে ডেটাবজে পাঠায়। যাতে ভ্যালু উল্লেখ করা থাকে না। ভ্যালুর পরিবর্তে ("?") প্যারামিটার দেওয়া থাকে।
উদাহরনস্বরূপঃINSERTINTOtestTBVALUES(?,?,?) - ডেটাবেজ এই SQL স্টেটমেন্ট টেমপ্লেটকে পার্স(parse), কম্পাইল উপর ডেটাবেসে কুয়েরি অপ্টিমাইজেশন(optimization) হয় এবং ফলাফল সম্পাদন করা ছাড়া জমা করা হয়।
- পরবর্তিতে অ্যাপ্লিকেশনটি প্যারামিটারের সাথে ভ্যালু গুলোকে আবদ্ধ করে দেয় এবং ডেটাবেস স্টেটমেন্টি সম্পাদন করে। অ্যাপ্লিকেশনটি বিভিন্ন ভ্যালু সহ যতবার ইচ্ছা স্টেটমেন্টিকে সম্পাদন করতে পারে।
SQL স্টেটমেন্ট সরাসরি সম্পাদন। প্রিপেয়ার্ড স্টেটমেন্টের দুইটি প্রধান সুবিধা রয়েছেঃ
- প্রিপেয়ার্ড স্টেটমেন্টের ক্ষেত্রে সময় কম লাগে। কারন এটি কুয়েরি একবার করেই বারবার কার্য-সম্পাদন করতে পারে।
- আবদ্ধ(Bound) প্যারামিটার ব্যবহারে সার্ভারে ব্যান্ডউইডথ কম খরচ হয়। কারন এটি প্রতিবারে সম্পূর্ন কুয়েরির পরিবর্তে শুধুমাত্র প্যারামিটার গুলো পাঠায়।
- SQL ইঞ্জেকশনের প্রতিরোধে প্রিপেয়ার্ড স্টেটমেন্ট খুবই গুরুত্বপূর্ণ। কারন এর প্যারামিটারের মানগুলি যা পরবর্তীতে একটি ভিন্ন প্রোটোকল ব্যবহার করে প্রেরন করা হয়। এগুলো সঠিকভাবে পাঠানোর প্রয়োজন হয় না। তাই মূল স্টেটমেন্ট টেমপ্লেট বহিরাগত ইনপুট থেকে পাওয়া যায় না। তাই SQL ইঞ্জেকশন ঘটতে পারে না।
নিম্নের উদাহরনে মাইSQLআই(MySQLi) তে প্রিপেয়ার্ড স্টেটমেন্ট এবং আবদ্ধ প্যারামিটার ব্যবহার করা হয়েছেঃ
মাইSQLআই(MySQLi) প্রক্রিয়াঃ
kt_satt_skill_example_id=456
উপরের উদাহরন থেকে কোড লাইনের বর্ণনাঃ
kt_satt_skill_example_id=457
SQLে আমরা (?)প্রশ্নবোধক চিহ্ন ব্যবহার করি যেসকল ক্ষেত্রে আমরা পরবর্তীতে integer, string, double অথবা blob ভ্যালু ব্যবহার করবো।
তারপর bind_param() ফাংশনটি দেখুনঃ
kt_satt_skill_example_id=458
এই ফাংশনটি SQL কুয়েরির সাথে প্যারামিটারের বন্ধন যুক্ত করে এবং ডেটাবেসকে বলে প্যারামিটার গুলো কি হবে। প্যারামিটার "sss" আর্গুমেন্ট গুলো হচ্ছে ডেটা টাইপ। "s" ক্যারেক্টারটি মাইSQLকে বলে যে প্যারামিটারটি স্ট্রিং টাইপের।
আর্গুমেন্ট গুলো নিম্নের যে কোনো একটি হতে পারেঃ
- i - integer
- d - double
- s - string
- b - BLOB
আমাদের প্রতিটি প্যারামিটারের জন্য অবশ্যই এইগুলির একটি থাকতে হবে।
আমরা ডেটাবেস কিধরনের তথ্য পেতে পারে তা উল্লেখ করার মাধ্যমে SQL ইঞ্জেকশনের ঝুঁকি কমিয়ে দিচ্ছি।
সতর্কতাঃ আপনি যদি ব্যবহারকারীর কাছ থেকে ইনপুট গ্রহন করেন সে ক্ষেত্রে তথ্য অবশ্যই ভেলিডেট করে নিবেন।
SQL SELECT স্টেটমেন্ট ব্যবহার করে এক বা একাধিক টেবিল থেকে তথ্য সিলেক্ট করা যায়।
kt_satt_skill_example_id=459
অথবা আমরা (*) ক্যারেক্টারটি ব্যবহার করে টেবিল থেকে সকল কলাম সিলেক্ট করতে পারি।
kt_satt_skill_example_id=460
SQL সম্পর্কে আরো জানতে, আমাদের SQL টিউটোরিয়াল দেখুন।
নিম্নের উদাহরনটি "testTB" টেবিল থেকে id, firstname এবং lastname কলাম গুলো সিলেক্ট করবে এবং উক্ত পেজে প্রর্দশন করবেঃ
উদাহরণঃ MySQLi প্রসিডিউরাল প্রক্রিয়ায় MySQL থেকে তথ্য সিলেক্ট করা।
kt_satt_skill_example_id=461
উদাহরণঃ MySQLi অব্জেক্ট-অরিয়েন্টেড প্রক্রিয়ায় MySQL থেকে তথ্য সিলেক্ট করা।
kt_satt_skill_example_id=463
উপরের উদাহরনের কোড লাইনগুলো নিম্নে বর্ণনা করা হলোঃ
প্রথমত আমরা একটি সংযোগ তৈরি করেছি। তারপর সংযোগটি পরীক্ষা করেছি। তারপর একটি কুয়েরি করেছি যা "testTB" টেবিল থেকে "id", "firstname" এবং "lastname" কলাম গুলোকে সিলেক্ট করে। পরবর্তী লাইনে "$result" নামে একটি ভ্যারিয়েবল নেওয়া হয়েছে যাতে কুয়েরি থেকে প্রাপ্ত সকল তথ্য জমা হয়।
তারপর num_rows() ফাংশনটি পরীক্ষা করে দেখে এতে শূণ্যের চেয়ে বেশী ফলাফল আছে কিনা। যদি শূণ্যের চেয়ে বেশী ফলাফল থাকে সে ক্ষেত্রে fetch_assoc() ফাংশনটি ফলাফল গুলোকে আসোসিয়েটিভ(associative) অ্যারেতে(array) রূপান্তর করে। এর পরবর্তীতে এই আসোসিয়েটিভ(associative) অ্যারেটি(array) থেকে While loop এর মাধ্যমে ডেটাবেজ থেকে প্রাপ্ত "id", "firstname" এবং "lastname" কলামের তথ্য গুলোর আউটপুট পাই।
আপনি প্রাপ্ত তথ্য গুলোকে এইচটিএমএল টেবিল আকারে প্রদর্শন করাতে পারেনঃ
MySQLi অব্জেক্ট-অরিয়েন্টেড প্রক্রিয়াঃ
উদাহরণঃ MySQLi অব্জেক্ট-অরিয়েন্টেড প্রক্রিয়ায় তথ্য HTML টেবিলের মাধ্যমে দেখানো।
kt_satt_skill_example_id=464
পিএইচপি মাইএসকিউএল Where Clause (PHP MySQL WHERE Clause)
MySQL WHERE Clause হল একটি SQL কমান্ড, যা একটি SQL SELECT, UPDATE, DELETE স্টেটমেন্টের মধ্যে নির্দিষ্ট শর্ত দিয়ে ডেটা ফিল্টার বা সিলেক্ট করতে ব্যবহৃত হয়। PHP এর মাধ্যমে আপনি MySQL Database থেকে ডেটা নির্বাচন করার সময় WHERE ক্লজ ব্যবহার করতে পারেন। এটি শর্ত ভিত্তিক ডেটা ফিল্টার করে, অর্থাৎ আপনি যদি নির্দিষ্ট ডেটা চান, তবে WHERE ক্লজের মাধ্যমে সেটি নির্ধারণ করা হয়।
MySQL WHERE Clause Syntax:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
এখানে:
column1,column2... হল আপনার সিলেক্ট করা কলামগুলো।table_nameহল টেবিলের নাম যেখান থেকে ডেটা নিয়ে আসতে চান।conditionহল সেই শর্ত যা আপনি ডেটা নির্বাচন করতে চান।
PHP Example with MySQL WHERE Clause:
এখন PHP এর মাধ্যমে MySQL WHERE Clause ব্যবহার করে ডেটা সিলেক্ট করার উদাহরণ দেখা যাক:
Step 1: Database Connection
প্রথমে আপনাকে MySQL ডাটাবেসে কানেক্ট করতে হবে। এটির জন্য mysqli_connect() ব্যবহার করা হয়।
connect_error) {
die("Connection failed: " . $conn->connect_error);
}
?>
Step 2: Using WHERE Clause with SELECT Query
এখন, WHERE ক্লজ ব্যবহার করে সিলেক্ট স্টেটমেন্ট লিখব, যাতে নির্দিষ্ট শর্ত অনুযায়ী ডেটা পাওয়া যাবে।
30"; // Query with WHERE clause
$result = $conn->query($sql); // Execute query
if ($result->num_rows > 0) {
// Output data of each row
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Age: " . $row["age"]. "
";
}
} else {
echo "0 results";
}
$conn->close(); // Close the connection
?>
এখানে:
SELECT id, name, age FROM users WHERE age > 30;এই কোয়েরি শুধু সেই ইউজারদের সিলেক্ট করবে যাদের বয়স ৩০ এর বেশি।fetch_assoc()মেথড ব্যবহার করে রেজাল্টের রেকর্ডগুলো অ্যাসোসিয়েটিভ অ্যারে হিসেবে ফেচ করা হয়েছে।
MySQL WHERE Clause এর মধ্যে বিভিন্ন শর্ত ব্যবহার করা:
1. Equal (=)
$sql = "SELECT * FROM users WHERE age = 25";
2. Not Equal (!=)
$sql = "SELECT * FROM users WHERE age != 25";
3. Greater Than (>)
$sql = "SELECT * FROM users WHERE age > 30";
4. Less Than (<)
$sql = "SELECT * FROM users WHERE age < 30";
5. Greater Than or Equal To (>=)
$sql = "SELECT * FROM users WHERE age >= 25";
6. Less Than or Equal To (<=)
$sql = "SELECT * FROM users WHERE age <= 30";
7. LIKE (For Pattern Matching)
$sql = "SELECT * FROM users WHERE name LIKE 'J%'";
এটি name কলামে যেসব নাম J দিয়ে শুরু হয় তাদের সিলেক্ট করবে।
8. AND, OR Conditions
$sql = "SELECT * FROM users WHERE age > 25 AND gender = 'Male'";
$sql = "SELECT * FROM users WHERE age > 25 OR gender = 'Female'";
এখানে, প্রথম কোয়েরি age > 25 এবং gender = 'Male' দুটি শর্তে ডেটা নির্বাচন করবে, এবং দ্বিতীয় কোয়েরি age > 25 অথবা gender = 'Female' শর্তে ডেটা নির্বাচন করবে।
9. BETWEEN (Range)
$sql = "SELECT * FROM users WHERE age BETWEEN 20 AND 30";
এটি age ২০ থেকে ৩০ এর মধ্যে থাকা ইউজারদের সিলেক্ট করবে।
10. IN (Multiple Values)
$sql = "SELECT * FROM users WHERE id IN (1, 2, 3)";
এটি id ১, ২, অথবা ৩ এর সাথে মিল থাকা ইউজারদের সিলেক্ট করবে।
11. IS NULL (For NULL Values)
$sql = "SELECT * FROM users WHERE email IS NULL";
এটি সিলেক্ট করবে যেখানে email ফিল্ডটি NULL।
Prepared Statements with WHERE Clause (For Security)
SQL ইনজেকশন রোধ করার জন্য Prepared Statements ব্যবহার করা উচিত। MySQLi বা PDO এর মাধ্যমে এই ধরনের স্টেটমেন্ট তৈরি করা হয়।
Prepared Statement Example:
prepare("SELECT id, name, age FROM users WHERE age > ?");
$stmt->bind_param("i", $age); // 'i' denotes the type (integer)
$age = 30;
$stmt->execute();
$result = $stmt->get_result();
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Age: " . $row["age"]. "
";
}
$stmt->close();
?>
এখানে:
bind_paramদিয়ে prepared statement এর প্যারামিটার বেঁধে দেওয়া হয়েছে, যা ইনপুট ভ্যালু নিরাপদভাবে যুক্ত করে।execute()মেথড দিয়ে কোয়েরি চালানো হয়েছে।
সারসংক্ষেপ:
MySQL WHERE Clause হল SQL স্টেটমেন্টে একটি শক্তিশালী টুল যা পিএইচপি দিয়ে ডেটা ফিল্টার বা সিলেক্ট করার সময় ব্যবহৃত হয়। আপনি WHERE ক্লজ দিয়ে নির্দিষ্ট শর্তের মাধ্যমে ডেটা নির্বাচন করতে পারেন, যেমন সংখ্যা, স্ট্রিং, রেঞ্জ, প্যাটার্ন, বা মুলতুবি শর্ত। পিএইচপি দিয়ে MySQL WHERE Clause ব্যবহারের সময়, আপনি Prepared Statements ব্যবহার করে সিকিউর কোডও লিখতে পারেন, যা SQL ইনজেকশন প্রতিরোধে সহায়ক।
PHP MySQL ORDER BY হল একটি SQL স্টেটমেন্ট যা ডেটাবেস থেকে রেকর্ডগুলিকে সাজানোর জন্য ব্যবহৃত হয়। ORDER BY ক্লজের মাধ্যমে আপনি ডেটা ascending (ASC) বা descending (DESC) অর্ডারে সাজাতে পারেন।
MySQL ORDER BY ক্লজের ব্যবহার:
ORDER BY ক্লজটি SELECT স্টেটমেন্টে ব্যবহার করা হয় এবং এটি ডেটা সাজানোর জন্য নির্দিষ্ট কলাম ব্যবহার করে। এটি ASC (ascending) বা DESC (descending) নির্দিষ্ট করতে পারে, যার মাধ্যমে আপনি সাজানোর ক্রম ঠিক করতে পারবেন।
MySQL ORDER BY Syntax:
SELECT column1, column2, ...
FROM table_name
ORDER BY column_name [ASC | DESC];
ASC: Ascending order (ডিফল্ট)। এটি ছোট থেকে বড় সংখ্যা বা ছোট থেকে বড় অক্ষর অনুযায়ী সাজায়।DESC: Descending order। এটি বড় থেকে ছোট সংখ্যা বা বড় থেকে ছোট অক্ষর অনুযায়ী সাজায়।
PHP MySQL ORDER BY উদাহরণ:
ধরা যাক, আপনার একটি users টেবিল রয়েছে, যেখানে id, name, এবং age কলাম রয়েছে। আপনি age কলামের ভিত্তিতে ডেটা সাজাতে চান।
১. ASCENDING ORDER (ছোট থেকে বড়):
connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// "age" কলাম অনুযায়ী ascending অর্ডারে ডেটা নির্বাচন করুন
$sql = "SELECT id, name, age FROM users ORDER BY age ASC";
$result = $conn->query($sql);
// ডেটা আউটপুট করুন
if ($result->num_rows > 0) {
// প্রতিটি রেকর্ডের জন্য লুপ করুন
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Age: " . $row["age"]. "
";
}
} else {
echo "0 results";
}
$conn->close();
?>
ব্যাখ্যা:
ORDER BY age ASC:ageকলামের মান অনুযায়ী রেকর্ডগুলো ascending অর্ডারে সাজানো হচ্ছে (ছোট থেকে বড়)।
২. DESCENDING ORDER (বড় থেকে ছোট):
connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// "age" কলাম অনুযায়ী descending অর্ডারে ডেটা নির্বাচন করুন
$sql = "SELECT id, name, age FROM users ORDER BY age DESC";
$result = $conn->query($sql);
// ডেটা আউটপুট করুন
if ($result->num_rows > 0) {
// প্রতিটি রেকর্ডের জন্য লুপ করুন
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Age: " . $row["age"]. "
";
}
} else {
echo "0 results";
}
$conn->close();
?>
ব্যাখ্যা:
ORDER BY age DESC:ageকলামের মান অনুযায়ী রেকর্ডগুলো descending অর্ডারে সাজানো হচ্ছে (বড় থেকে ছোট)।
৩. একাধিক কলামের ভিত্তিতে সাজানো:
আপনি একাধিক কলাম ব্যবহার করে সাজাতে পারেন। ধরুন, আপনি প্রথমে age কলাম অনুযায়ী সাজাতে চান এবং তারপর name কলাম অনুযায়ী সাজাতে চান।
connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// "age" অনুযায়ী ascending এবং "name" অনুযায়ী ascending অর্ডারে সাজানো
$sql = "SELECT id, name, age FROM users ORDER BY age ASC, name ASC";
$result = $conn->query($sql);
// ডেটা আউটপুট করুন
if ($result->num_rows > 0) {
// প্রতিটি রেকর্ডের জন্য লুপ করুন
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Age: " . $row["age"]. "
";
}
} else {
echo "0 results";
}
$conn->close();
?>
ব্যাখ্যা:
ORDER BY age ASC, name ASC: প্রথমেageকলাম অনুযায়ী ascending অর্ডারে সাজানো হবে, এবং যদি দুটিageসমান হয়, তাহলে সেগুলোnameকলাম অনুযায়ী ascending অর্ডারে সাজানো হবে।
৪. পিএইচপি PDO (PHP Data Objects) ব্যবহার করে ORDER BY:
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// "age" কলামের ভিত্তিতে descending অর্ডারে ডেটা নির্বাচন করুন
$sql = "SELECT id, name, age FROM users ORDER BY age DESC";
$stmt = $conn->prepare($sql);
$stmt->execute();
// ডেটা আউটপুট করুন
$result = $stmt->fetchAll();
foreach($result as $row) {
echo "id: " . $row['id'] . " - Name: " . $row['name'] . " - Age: " . $row['age'] . "
";
}
}
catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
$conn = null;
?>
ব্যাখ্যা:
- এখানে PDO ব্যবহার করে একই কাজ করা হয়েছে।
prepare()মেথডের মাধ্যমে SQL স্টেটমেন্ট প্রস্তুত করা হয়, এবং তারপরexecute()এর মাধ্যমে সেটি রান করা হয়।
সারসংক্ষেপ:
MySQL ORDER BY হল একটি শক্তিশালী টুল যা আপনাকে ডেটাবেসের ডেটা সাজানোর জন্য ব্যবহৃত হয়। আপনি ascending (ASC) বা descending (DESC) অর্ডারে ডেটা সাজাতে পারেন এবং একাধিক কলাম দিয়ে সাজানোর জন্য এটি ব্যবহার করতে পারেন। PHP এর মাধ্যমে MySQL ORDER BY ব্যবহার করে আপনি ডেটাকে আপনার প্রয়োজন অনুযায়ী সাজাতে পারেন এবং ডেটাবেস থেকে প্রাপ্ত তথ্য ব্যবহারকারীর কাছে সুন্দরভাবে প্রদর্শন করতে পারেন।
SQL DELETE স্টেটমেন্ট ব্যবহার করে টেবিল থেকে তথ্য(data) ডিলেট করা হয়।
kt_satt_skill_example_id=472
সতর্কতাঃ কোনো টেবিল থেকে তথ্য ডিলেট করার সময় অবশ্যই
WHERE clauseব্যবহার করতে হবে। টেবিল থেকে তথ্য ডিলেট করার সময়WHERE clauseদ্বারা নির্ধারন করে দিতে হবে যে, কোন কোন তথ্য বা তথ্যসমূহ ডিলেট হবে। অন্যথায় টেবিলের সকল তথ্য ডিলেট হয়ে যাবে।
SQL সম্মন্ধে আরও জানতে আমাদের SQL টিউটোরিয়াল দেখুন।
নিম্নের "testTB" টেবিলটি লক্ষ্য করুনঃ
| id | firstname | lastname | insert_date | |
|---|---|---|---|---|
| 1 | Azizur | Rahman | aziz@example.com | 2017-10-23 10:46:25 |
| 2 | Tamjid | Hasan | tamjid@example.com | 2017-10-23 11:32:20 |
| 3 | Saleh | Ahammed | saleh@example.com | 2017-10-25 12:28:30 |
নিম্নের উদাহরনটি "testTB" টেবিলের ৩নং আইডির তথ্য ডিলেট করবেঃ
kt_satt_skill_example_id=473
উদাহরণঃ MySQLi অব্জেক্ট-অরিয়েন্টেড প্রক্রিয়ায় ৩ং আইডির তথ্য ডিলেট করাঃ
kt_satt_skill_example_id=474
তথ্যটি ডিলেট করার পর টেবিলটি নিম্নের মত দেখাবেঃ
| id | firstname | lastname | insert_date | |
|---|---|---|---|---|
| 1 | Azizur | Rahman | aziz@example.com | 2017-10-23 10:46:25 |
| 2 | Tamjid | Hasan | tamjid@example.com | 2017-10-23 11:32:20 |
SQL UPDATE স্টেটমেন্ট ব্যবহার করে টেবিলে সংরক্ষিত তথ্যকে আপডেট করা যায়ঃ
kt_satt_skill_example_id=477
সতর্কতাঃ কোনো টেবিলে তথ্য আপডেট করার সময় অবশ্যই
WHERE clauseব্যবহার করতে হবে।WHERE clauseদ্বারা নির্ধারন করে দিতে হবে যে, কোন কোন তথ্য বা তথ্যসমূহ আপডেট হবে। অন্যথায় টেবিলের সকল তথ্য আপডেট হয়ে যাবে।
SQL সম্মন্ধে আরও জানতে আমাদের SQL টিউটোরিয়াল দেখুন।
নিম্নের "testTB" টেবিলটি লক্ষ্য করুনঃ
| id | firstname | lastname | insert_date | |
|---|---|---|---|---|
| 1 | Tamjid | Hasan | tamjid@example.com | 2017-10-23 10:46:25 |
| 2 | Azizur | Rahman | aziz@example.com | 2017-10-23 11:32:20 |
নিম্নের উদাহরনটি "testTB" টেবিলের ২নং আইডির শেষ নাম(lastname) কলামের তথ্য আপডেট করবেঃ
উদাহরণঃ MySQLi প্রসিডিউরাল প্রক্রিয়ায় ২নং আইডির তথ্য আপডেট করাঃ
kt_satt_skill_example_id=479
উদাহরণঃ MySQLi অব্জেক্ট-অরিয়েন্টেড প্রক্রিয়ায় ২নং আইডির তথ্য আপডেট করাঃ
kt_satt_skill_example_id=480
| id | firstname | lastname | insert_date | |
|---|---|---|---|---|
| 1 | Tamjid | Hasan | tamjid@example.com | 2017-10-23 10:46:25 |
| 2 | Azizur | Hasan | aziz@example.com | 2017-10-23 11:32:20 |
MySQL LIMIT clause ব্যবহার করে আপনি ডেটাবেজ থেকে নির্দিষ্ট পরিসর/ব্যবধির মধ্যে তথ্য সিলেক্ট করতে পারেন।
SQL LIMIT clause ব্যবহার করে আপনি খুব সহজেই পেজিনেশন(pagination) তৈরি করতে পারেন যা বড় বড় টেবিলের ক্ষেত্রে খুবই উপকারী।
যেমন- ধরুন বহুসংখ্যক রেকর্ড বিশিষ্ট একটি বড় টেবিল থেকে আপনি সকল তথ্য কুয়েরি করতে চাচ্ছেন। এমন্তাবস্থায় আপনার অ্যাপ্লিকেশনের কর্মক্ষমতার উপর প্রভাব পড়তে পারে। কিন্তু আপনি যদি LIMIT clause ব্যবহার করে সীমিত তথ্য কুয়েরি করেন তাহলে আপনি অপনার কাংখিত কাজটি দ্রুত করে ফেলতে পারবেন।
এখন আমরা "Student_details" টেবিল থেকে সকল তথ্য সিলেক্ট করে ১ থেকে ১৫ পর্যন্ত তথ্যের আউটপুট নিব।
SQL কুয়েরিটি নিম্নরূপঃ
kt_satt_skill_example_id=481
যখন উপরের কুয়েরিটি রান করানো হবে, তখন এটি টেবিল থেকে প্রথম ১৫টি তথ্য নিয়ে আসবে।
আপনি যদি ১১ থেকে ১৫ পর্যন্ত তথ্য গুলো নিয়ে আসতে চান, তাহলে কি করবেন?
MySQL এর OFFSET কিওয়ার্ড ব্যবহার করে আপনি এই কাজটিও করতে পারেন।
আপনি OFFSET-এ যে সংখ্যাটি লিখবেন এটি ঠিক তার পরবর্তী সংখ্যা থেকে কুয়েরি করা শুরু করবে। সুতরাং আপনি ১১তম সংখ্যা থেকে কুয়েরি করতে চাইলে আপনাকে OFFSET 10 লিখতে হবে।
নিম্নের SQL কুয়েরিটি ৫টি তথ্য নিয়ে আসবে। এটি ১১তম তথ্য থেকে শুরু হয়ে ৫টি তথ্য অর্থাৎ ১৫ পর্যন্ত তথ্যসমূহ নিয়ে আসবেঃ
kt_satt_skill_example_id=482
আপনি একই ফলাফল পাওয়ার জন্য নিম্নের সংক্ষিপ্ত সিনট্যাক্সটিও ব্যবহার করতে পারেনঃ
kt_satt_skill_example_id=484
লক্ষ্য করুন, সংক্ষিপ্ত সিনট্যাক্সের ক্ষেত্রে কমা ব্যবহারের সময় সংখ্যা গুলো উল্টে গেছে।
Read more