পিএইচপি-তে ডাটাবেস ব্যবস্থাপনার জন্য SQLite একটি চমৎকার পছন্দ, কারণ এটি হালকা, সার্ভারবিহীন এবং পিএইচপি 5.3.0 থেকে এক্সটেনশন ডিফল্টভাবে সক্রিয় থাকে। SQLite3 ক্লাস ব্যবহার করে আপনি সহজেই ডাটাবেস ফাইল তৈরি, টেবিল তৈরি, ডেটা ইনসার্ট, আপডেট, ডিলিট এবং জিজ্ঞাসা করতে পারেন। আজকের পর্বে আমরা পিএইচপিতে SQLite3-এর প্রধান API-গুলো (open, exec, query, fetchArray, changes, close) ব্যবহারিক উদাহরণসহ বিস্তারিত শিখব।
পূর্বপ্রস্তুতি
- পিএইচপি 5.3.0 বা তার উপরের সংস্করণ ইনস্টল করা থাকতে হবে। (SQLite3 এক্সটেনশন ডিফল্টভাবে চালু থাকে; যদি নাও থাকে তাহলে
php.ini-তেextension=sqlite3লাইনটি আনকমেন্ট করতে হবে।) - উইন্ডোজ ব্যবহারকারীদের
php_sqlite3.dllসক্রিয় আছে কিনা নিশ্চিত করতে হবে (পিএইচপি 5.3.0 থেকে এটি অন্তর্ভুক্ত)। - কোনো অতিরিক্ত প্যাকেজ ডাউনলোডের প্রয়োজন নেই।
১. ডাটাবেসে সংযোগ (Connect to Database)
পিএইচপি-তে SQLite ডাটাবেস খোলার জন্য আমরা SQLite3 ক্লাসের একটি অবজেক্ট তৈরি করি। নিচের উদাহরণে MyDB নামে একটি ক্লাস SQLite3-কে এক্সটেন্ড করে test.db ফাইলটি খুলছে।
php
<?php
class MyDB extends SQLite3 {
function __construct() {
$this->open('test.db');
}
}
$db = new MyDB();
if(!$db) {
echo $db->lastErrorMsg();
} else {
echo "Opened database successfully\n";
}
?>
এই কোডটি test.db নামে একটি ডাটাবেস ফাইল তৈরি করবে (যদি না থাকে) এবং একটি সংযোগ স্থাপন করবে। open() মেথডের প্রথম প্যারামিটার হলো ফাইলের নাম। আপনি চাইলে সম্পূর্ণ পাথও দিতে পারেন।
গুরুত্বপূর্ণ পদ্ধতি:
open(filename, flags, encryption_key): ডাটাবেস খোলে।:memory:দিলে ইন-মেমোরি ডাটাবেস তৈরি হবে।lastErrorMsg(): সর্বশেষ ত্রুটির বর্ণনা ফেরত দেয়।lastErrorCode(): ত্রুটির সাংখ্যিক কোড ফেরত দেয়।close(): ডাটাবেস সংযোগ বন্ধ করে।
২. টেবিল তৈরি (CREATE TABLE)
টেবিল তৈরি করতে exec() মেথড ব্যবহার করা হয়, যা ফলাফল-হীন (result-less) SQL কমান্ড চালায়।
php
<?php
class MyDB extends SQLite3 {
function __construct() {
$this->open('test.db');
}
}
$db = new MyDB();
if(!$db) {
echo $db->lastErrorMsg();
} else {
echo "Opened database successfully\n";
}
$sql =<<<EOF
CREATE TABLE COMPANY
(ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL);
EOF;
$ret = $db->exec($sql);
if(!$ret){
echo $db->lastErrorMsg();
} else {
echo "Table created successfully\n";
}
$db->close();
?>
এখানে <<<EOF দিয়ে মাল্টি-লাইন স্ট্রিং তৈরি করা হয়েছে। exec() সফল হলে true, নয়তো false রিটার্ন করে।
৩. INSERT অপারেশন
নতুন রেকর্ড যোগ করতে একই exec() ব্যবহার করা যায়। একাধিক INSERT একসাথে চালাতে পারেন।
php
<?php
class MyDB extends SQLite3 {
function __construct() {
$this->open('test.db');
}
}
$db = new MyDB();
if(!$db){
echo $db->lastErrorMsg();
} else {
echo "Opened database successfully\n";
}
$sql =<<<EOF
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Paul', 32, 'California', 20000.00 );
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Allen', 25, 'Texas', 15000.00 );
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );
EOF;
$ret = $db->exec($sql);
if(!$ret) {
echo $db->lastErrorMsg();
} else {
echo "Records created successfully\n";
}
$db->close();
?>
৪. SELECT অপারেশন
ডেটা পড়তে query() মেথড ব্যবহার করা হয়, যা একটি SQLite3Result অবজেক্ট ফেরত দেয়। তারপর fetchArray() দিয়ে রেকর্ড ফেচ করা হয়।
php
<?php
class MyDB extends SQLite3 {
function __construct() {
$this->open('test.db');
}
}
$db = new MyDB();
if(!$db) {
echo $db->lastErrorMsg();
} else {
echo "Opened database successfully\n";
}
$sql =<<<EOF
SELECT * from COMPANY;
EOF;
$ret = $db->query($sql);
while($row = $ret->fetchArray(SQLITE3_ASSOC) ) {
echo "ID = ". $row['ID'] . "\n";
echo "NAME = ". $row['NAME'] ."\n";
echo "ADDRESS = ". $row['ADDRESS'] ."\n";
echo "SALARY = ".$row['SALARY'] ."\n\n";
}
echo "Operation done successfully\n";
$db->close();
?>
fetchArray()-এর মোড SQLITE3_ASSOC দিলে associative array ফেরত আসে। SQLITE3_NUM দিলে numeric index, SQLITE3_BOTH দিলে উভয়ই। প্রতিটি fetchArray() কল পরবর্তী সারিতে চলে যায়।
৫. UPDATE অপারেশন
আপডেটের জন্য exec() ব্যবহার করা হয় এবং কতগুলো সারি প্রভাবিত হয়েছে তা জানতে changes() মেথড ব্যবহার করা যায়।
php
<?php
class MyDB extends SQLite3 {
function __construct() {
$this->open('test.db');
}
}
$db = new MyDB();
if(!$db) {
echo $db->lastErrorMsg();
} else {
echo "Opened database successfully\n";
}
$sql =<<<EOF
UPDATE COMPANY set SALARY = 25000.00 where ID=1;
EOF;
$ret = $db->exec($sql);
if(!$ret) {
echo $db->lastErrorMsg();
} else {
echo $db->changes(), " Record updated successfully\n";
}
// পরিবর্তন যাচাই
$sql = "SELECT * from COMPANY;";
$ret = $db->query($sql);
while($row = $ret->fetchArray(SQLITE3_ASSOC) ) {
echo "ID = ". $row['ID'] . "\n";
echo "NAME = ". $row['NAME'] ."\n";
echo "SALARY = ".$row['SALARY'] ."\n\n";
}
$db->close();
?>
৬. DELETE অপারেশন
ডিলিট করতেও exec() এবং changes() ব্যবহার করা যায়।
php
<?php
class MyDB extends SQLite3 {
function __construct() {
$this->open('test.db');
}
}
$db = new MyDB();
if(!$db) {
echo $db->lastErrorMsg();
} else {
echo "Opened database successfully\n";
}
$sql =<<<EOF
DELETE from COMPANY where ID = 2;
EOF;
$ret = $db->exec($sql);
if(!$ret){
echo $db->lastErrorMsg();
} else {
echo $db->changes(), " Record deleted successfully\n";
}
// বাকি রেকর্ড দেখি
$sql = "SELECT * from COMPANY;";
$ret = $db->query($sql);
while($row = $ret->fetchArray(SQLITE3_ASSOC) ) {
echo "ID = ". $row['ID'] . "\n";
echo "NAME = ". $row['NAME'] ."\n";
echo "SALARY = ".$row['SALARY'] ."\n\n";
}
$db->close();
?>
৭. ডিরেক্টরি স্ট্রাকচার
উপরের সবগুলো পিএইচপি স্ক্রিপ্ট চালানোর পর আপনার প্রোজেক্ট ফোল্ডারে নিম্নলিখিত ফাইলগুলো থাকবে:
text
php-sqlite-demo/ ├── create.php ├── insert.php ├── select.php ├── update.php ├── delete.php └── test.db
প্রতিটি স্ক্রিপ্ট সরাসরি কমান্ড লাইন থেকে চালানো যায়: php create.php। test.db ফাইলটি ডাটাবেস ধারণ করবে।
প্যাকেজ ইন্সটলেশন: কোনো আলাদা প্যাকেজ লাগবে না, পিএইচপি-র বিল্ট-ইন SQLite3 এক্সটেনশন যথেষ্ট। যদি এক্সটেনশন লোড না থাকে, php.ini-তে extension=sqlite3 লাইন যোগ করতে পারেন।
৮. গুরুত্বপূর্ণ টিপস
- SQL ইনজেকশন প্রতিরোধ: কখনো সরাসরি ভ্যারিয়েবল জুড়ে SQL স্ট্রিং তৈরি করবেন না।
prepare()এবংbindValue()ব্যবহার করে প্যারামিটারাইজড কোয়েরি তৈরি করুন। উদাহরণ:php$stmt = $db->prepare(“INSERT INTO COMPANY VALUES (:id, :name, :age, :addr, :salary)”); $stmt->bindValue(‘:id’, $id, SQLITE3_INTEGER); $stmt->bindValue(‘:name’, $name, SQLITE3_TEXT); // … $stmt->execute(); - এস্কেপিং:
SQLite3::escapeString()ব্যবহার করে স্ট্রিং এস্কেপ করা যায়, তবে এটি Prepared Statement-এর বিকল্প নয়। - ত্রুটি ব্যবস্থাপনা:
lastErrorMsg()ওlastErrorCode()দিয়ে বিস্তারিত ত্রুটি বার্তা পান। প্রোডাকশনে এগুলো ব্যবহারকারীকে না দেখিয়ে লগ করুন। - ডাটাবেস ফাইলের নিরাপত্তা: ওয়েব সার্ভারে
test.dbফাইলটি পাবলিক ডিরেক্টরির বাইরে রাখুন অথবা.htaccessদিয়ে সরাসরি অ্যাক্সেস বন্ধ করুন। - অন্যান্য ফেচ মোড:
fetchArray(SQLITE3_NUM)দিয়ে শুধুমাত্র নাম্বার ইনডেক্সড অ্যারে,SQLITE3_BOTHদিয়ে উভয়ই পাবেন। changes()ফাংশন: শেষexec()কলে কতটি সারি আপডেট/ইনসার্ট/ডিলিট হয়েছে তা জানতে ব্যবহার করুন।
৯. সম্পূর্ণ অনুশীলন (একক স্ক্রিপ্টে CRUD)
একটি পূর্ণাঙ্গ উদাহরণ একত্রে:
php
<?php
class DB extends SQLite3 {
function __construct() {
$this->open('test.db');
}
}
$db = new DB();
if (!$db) {
echo "Connection failed.\n";
exit;
}
// Create table
$db->exec("CREATE TABLE IF NOT EXISTS COMPANY (
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
)");
// Insert
$db->exec("DELETE FROM COMPANY"); // পরিষ্কার
$db->exec("INSERT INTO COMPANY VALUES (1, 'Paul', 32, 'California', 20000)");
$db->exec("INSERT INTO COMPANY VALUES (2, 'Allen', 25, 'Texas', 15000)");
// Select
echo "All records:\n";
$result = $db->query("SELECT * FROM COMPANY");
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
echo "{$row['ID']}: {$row['NAME']} - {$row['SALARY']}\n";
}
// Update
$db->exec("UPDATE COMPANY SET SALARY = 30000 WHERE ID = 1");
echo "Updated rows: " . $db->changes() . "\n";
// Delete
$db->exec("DELETE FROM COMPANY WHERE ID = 2");
echo "Deleted rows: " . $db->changes() . "\n";
$db->close();
?>
পরবর্তী পর্বে
আমরা SQLite সিরিজের সমাপ্তি টানবো SQLite পর্যালোচনা ও পরবর্তী পদক্ষেপ – অন্যান্য ভাষায় SQLite ব্যবহার, উন্নত কৌশল এবং শেখার রিসোর্স নিয়ে।
লেখকের কথা: পিএইচপি-র সাথে SQLite ব্যবহার করা অত্যন্ত সহজ এবং দ্রুত। বাংলায় SQLite শেখার এই সিরিজ সম্পূর্ণ করতে আপনার উৎসাহ আমাদের বড় প্রেরণা। পোস্টটি ভালো লাগলে শেয়ার করুন, এবং সব আপডেট পেতে ToLearnTeam.com সাবস্ক্রাইব করতে ভুলবেন না। কোনো প্রশ্ন বা জিজ্ঞাসা জানাতে কমেন্ট করুন – আমরা উত্তর দিতে প্রস্তুত!
SQLite Full Course
- SQLite পরিচিতি ও ইন্সটলেশন গাইড – বাংলায় প্রথম ডাটাবেস তৈরি
- SQLite কী এবং কেন শিখবেন? সম্পূর্ণ ওভারভিউ ও কমান্ড ক্লাসিফিকেশন (DDL, DML, DQL)
- SQLite ইন্সটলেশন গাইড – Windows, Linux ও Mac-এ ধাপে ধাপে সেটআপ
- SQLite ডট কমান্ড (Dot Commands) – সম্পূর্ণ গাইড, আউটপুট ফরম্যাট ও sqlite_master
- SQLite সিনট্যাক্স (Syntax) – কেস সেনসিটিভিটি, কমেন্ট, সব কমান্ডের গঠন ও উদাহরণ
- SQLite ডেটা টাইপ (Data Type) – স্টোরেজ ক্লাস, টাইপ অ্যাফিনিটি, বুলিয়ান ও ডেট-টাইম
- SQLite ডেটাবেস তৈরি (Create Database) – ধাপে ধাপে গাইড, .dump এক্সপোর্ট ও রিস্টোর
- SQLite ATTACH DATABASE – একাধিক ডাটাবেস সংযুক্ত করার সম্পূর্ণ গাইড (বাংলা)
- SQLite DETACH DATABASE – সংযুক্ত ডাটাবেস বিচ্ছিন্ন করার পূর্ণাঙ্গ গাইড
- SQLite CREATE TABLE স্টেটমেন্ট – টেবিল তৈরি করার পূর্ণাঙ্গ গাইড (বাংলা)
- SQLite DROP TABLE স্টেটমেন্ট – টেবিল ডিলিট করার সম্পূর্ণ গাইড (বাংলা)
- SQLite INSERT INTO স্টেটমেন্ট – ডেটা ইনসার্ট করার সম্পূর্ণ গাইড (বাংলা)
- SQLite SELECT স্টেটমেন্ট – টেবিল থেকে ডেটা ফেচ করার সম্পূর্ণ গাইড (বাংলা)
- SQLite অপারেটর (Operators) – Arithmetic, Comparison, Logical, Bitwise (বাংলা টিউটোরিয়াল)
- SQLite এক্সপ্রেশন (Expressions) – বুলিয়ান, নিউমেরিক ও ডেট এক্সপ্রেশন (বাংলা টিউটোরিয়াল)
- SQLite AND ও OR অপারেটর – একাধিক শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
- SQLite UPDATE Query – টেবিলের ডেটা পরিবর্তন করার সম্পূর্ণ গাইড (বাংলা)
- SQLite DELETE Query – টেবিল থেকে ডেটা মুছে ফেলার সম্পূর্ণ গাইড (বাংলা)
- SQLite LIKE Operator – প্যাটার্ন মিলিয়ে ডেটা খোঁজার সম্পূর্ণ গাইড (বাংলা)
- SQLite GLOB Operator – কেস-সেনসিটিভ প্যাটার্ন মিলিয়ে ডেটা খোঁজা (বাংলা)
- SQLite LIMIT Clause – ডেটা সীমিত করে আনার সম্পূর্ণ গাইড (বাংলা)
- SQLite ORDER BY ক্লজ – ডেটা সাজানোর সম্পূর্ণ গাইড (বাংলা)
- SQLite GROUP BY ক্লজ – ডেটা গ্রুপ করে বিশ্লেষণ করার সম্পূর্ণ গাইড (বাংলা)
- SQLite HAVING ক্লজ – গ্রুপের উপর শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
- SQLite DISTINCT Keyword – ডুপ্লিকেট ডেটা বাদ দিয়ে ইউনিক ভ্যালু পাওয়া (বাংলা)
- SQLite PRAGMA কমান্ড – ডাটাবেস কনফিগারেশন ও সেটিংস (বাংলা টিউটোরিয়াল)
- SQLite Constraints – NOT NULL, DEFAULT, UNIQUE, PRIMARY KEY, CHECK (বাংলা টিউটোরিয়াল)
- SQLite JOINS – CROSS JOIN, INNER JOIN, LEFT OUTER JOIN (বাংলা টিউটোরিয়াল)
- SQLite UNION ও UNION ALL – একাধিক SELECT একত্রিত করার সম্পূর্ণ গাইড (বাংলা)
- SQLite NULL Values – NULL কী, IS NULL, IS NOT NULL (বাংলা টিউটোরিয়াল)
- SQLite ALIAS Syntax – টেবিল ও কলামের অস্থায়ী নাম (বাংলা টিউটোরিয়াল)
- SQLite Triggers – স্বয়ংক্রিয় ট্রিগার তৈরি, ব্যবহার ও মুছে ফেলা (বাংলা টিউটোরিয়াল)
- SQLite Indexes – CREATE, UNIQUE, COMPOSITE, DROP INDEX (বাংলা টিউটোরিয়াল)
- SQLite INDEXED BY Clause – নির্দিষ্ট ইনডেক্স ব্যবহার ও NOT INDEXED (বাংলা)
- SQLite ALTER TABLE Command – টেবিলের গঠন পরিবর্তন (বাংলা টিউটোরিয়াল)
- SQLite TRUNCATE TABLE Command – DELETE ও DROP দিয়ে টেবিল খালি করা (বাংলা)
- SQLite Views – ভার্চুয়াল টেবিল তৈরি, ব্যবহার ও ডিলিট (বাংলা টিউটোরিয়াল)
- SQLite Transactions – BEGIN, COMMIT, ROLLBACK ও ACID প্রপার্টি (বাংলা)
- SQLite Subqueries – SELECT, INSERT, UPDATE, DELETE-এ সাবকোয়েরি ব্যবহার (বাংলা টিউটোরিয়াল)
- SQLite AUTOINCREMENT – স্বয়ংক্রিয়ভাবে প্রাইমারি কি মান বৃদ্ধি (বাংলা টিউটোরিয়াল)
- SQLite SQL Injection – কী, কেন বিপজ্জনক ও প্রতিরোধের উপায় (বাংলা টিউটোরিয়াল)
- SQLite EXPLAIN ও EXPLAIN QUERY PLAN – কোয়েরি বিশ্লেষণ (বাংলা টিউটোরিয়াল)
- SQLite VACUUM – ডাটাবেস পরিষ্কার, স্পেস রিক্লেইম ও অটো-ভ্যাকুয়াম (বাংলা টিউটোরিয়াল)
- SQLite Date & Time ফাংশন – date(), time(), datetime(), julianday(), strftime() (বাংলা টিউটোরিয়াল)
- SQLite Useful Functions – COUNT, MAX, MIN, AVG, SUM, RANDOM, ABS, UPPER, LOWER, LENGTH (বাংলা টিউটোরিয়াল)
- SQLite C/C++ প্রোগ্রামিং – sqlite3_open, exec, close, callback (বাংলা টিউটোরিয়াল)
- SQLite PHP প্রোগ্রামিং – PHP-তে SQLite ডাটাবেস ব্যবহার (বাংলা টিউটোরিয়াল)
- SQLite Perl প্রোগ্রামিং – DBI/DBD::SQLite দিয়ে ডাটাবেস অপারেশন (বাংলা)
- SQLite Python প্রোগ্রামিং – sqlite3 মডিউল দিয়ে CRUD অপারেশন (বাংলা টিউটোরিয়াল)
- SQLite Quick Guide – বাংলায় পূর্ণাঙ্গ সংক্ষিপ্ত টিউটোরিয়াল (শেখার সহজ গাইড)
