نمونه اسکریپت ایجاد عملیات CRUD با استفاده از رویکرد PHP OOP و پایگاه داده SQLite3


در دنیای برنامه‌نویسی وب، عملیات CRUD (Create, Read, Update, Delete) یکی از مهم‌ترین و پایه‌ای‌ترین عملیات‌هایی است که هر توسعه‌دهنده‌ای باید با آن آشنا باشد. این عملیات‌ها، اساس مدیریت داده‌ها را در برنامه‌های مختلف تشکیل می‌دهند و به صورت کلی، امکان افزودن، مشاهده، ویرایش و حذف داده‌ها را فراهم می‌سازند. حال، اگر بخواهید این عملیات‌ها را در قالب یک برنامه PHP، با بهره‌گیری از رویکرد برنامه‌نویسی شیء‌گرا (Object-Oriented Programming یا OOP) و پایگاه داده SQLite3 پیاده‌سازی کنید، باید به چند نکته مهم توجه کنید که در ادامه به طور کامل و جامع به آن‌ها می‌پردازم.

اهمیت رویکرد OOP در پروژه‌های PHP


رویکرد شیء‌گرا در برنامه‌نویسی PHP، به ما این امکان را می‌دهد که کد‌هایی منسجم، قابل نگهداری و توسعه‌پذیر بنویسیم. در این رویکرد، هر بخش از برنامه به صورت یک کلاس تعریف می‌شود؛ کلاس‌ها می‌توانند ویژگی‌ها (Properties) و رفتارها (Methods) خاص خود را داشته باشند. این ساختار، امکان ایجاد نمونه‌های متعدد (Objects) را فراهم می‌کند و به راحتی می‌توان در پروژه‌های بزرگ، کد‌های تکراری را کاهش داد، ماژولار بودن برنامه را تضمین کرد و فرآیند عیب‌یابی را ساده‌تر کرد.

چرا SQLite3؟


SQLite3، یکی از سیستم‌های مدیریت پایگاه داده‌های سبک‌وزن است که به صورت فایل در سیستم قرار می‌گیرد. این سیستم، بسیار مناسب برای پروژه‌های کوچک، نمونه‌سازی سریع، برنامه‌های دسکتاپ و حتی برنامه‌های تحت وب است. برخلاف سیستم‌های بزرگ‌تر مانند MySQL یا PostgreSQL، SQLite نیاز به نصب و پیکربندی پیشرفته ندارد و به راحتی در پروژه‌های کوچک و متوسط پیاده‌سازی می‌شود. این ویژگی، آن را به گزینه‌ای عالی برای نمونه‌سازی و توسعه اولیه تبدیل کرده است.

طراحی ساختاری اسکریپت CRUD در PHP OOP با SQLite3


در این پروژه، ما قصد داریم چهار عملیات اصلی را پیاده‌سازی کنیم:
1. ایجاد (Create): افزودن داده‌های جدید به پایگاه داده
2. خواندن (Read): دریافت و نمایش داده‌ها
3. به‌روزرسانی (Update): تغییر اطلاعات موجود
4. حذف (Delete): حذف داده‌ها از پایگاه داده
برای انجام این کار، بهتر است یک ساختار چندکلاسه طراحی کنیم، به‌طوری‌که یک کلاس مخصوص اتصال به پایگاه داده داشته باشیم، و کلاس‌های دیگر برای مدیریت عملیات‌های CRUD.

ساختار کلاس‌ها


کلاس DatabaseConnection


در این کلاس، مسئولیت برقراری اتصال به پایگاه داده SQLite3 و مدیریت آن است. این کلاس، باید یک نمونه Singleton باشد تا از برقراری چندین اتصال جلوگیری کند و کارایی بهتری داشته باشد. روش‌های مهم شامل اتصال، اجرای کوئری‌ها و بستن اتصال است.
php  
class DatabaseConnection {
private static $instance = null;
private $connection;
private function __construct() {
$this->connection = new SQLite3('database.db');
$this->initializeDatabase();
}
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new DatabaseConnection();
}
return self::$instance;
}
private function initializeDatabase() {
$query = "CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT NOT NULL UNIQUE
)";
$this->connection->exec($query);
}
public function getConnection() {
return $this->connection;
}
}

این کلاس، به صورت خودکار در هنگام اجرا، جدول مورد نیاز را ایجاد می‌کند و تنها یک نمونه از اتصال به پایگاه داده را فراهم می‌سازد.

کلاس User


کلاس User، نمایانگر کاربر است و عملیات CRUD مربوط به این جدول را مدیریت می‌کند. این کلاس، شامل متدهای جداگانه برای افزودن، خواندن، به‌روزرسانی و حذف کاربر است.
php  
class User {
private $db;
public function __construct() {
$this->db = DatabaseConnection::getInstance()->getConnection();
}
public function create($name, $email) {
$stmt = $this->db->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
$stmt->bindValue(':name', $name, SQLITE3_TEXT);
$stmt->bindValue(':email', $email, SQLITE3_TEXT);
return $stmt->execute();
}
public function getAll() {
$result = $this->db->query("SELECT * FROM users");
$users = [];
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
$users[] = $row;
}
return $users;
}
public function getById($id) {
$stmt = $this->db->prepare("SELECT * FROM users WHERE id = :id");
$stmt->bindValue(':id', $id, SQLITE3_INTEGER);
$result = $stmt->execute();
return $result->fetchArray(SQLITE3_ASSOC);
}
public function update($id, $name, $email) {
$stmt = $this->db->prepare("UPDATE users SET name = :name, email = :email WHERE id = :id");
$stmt->bindValue(':name', $name, SQLITE3_TEXT);
$stmt->bindValue(':email', $email, SQLITE3_TEXT);
$stmt->bindValue(':id', $id, SQLITE3_INTEGER);
return $stmt->execute();
}
public function delete($id) {
$stmt = $this->db->prepare("DELETE FROM users WHERE id = :id");
$stmt->bindValue(':id', $id, SQLITE3_INTEGER);
return $stmt->execute();
}
}

در این کلاس، هر متد با استفاده از prepared statements، امنیت عملیات را تضمین می‌کند و از SQL injection جلوگیری می‌شود.

پیاده‌سازی عملیات CRUD


حالا فرض کنید می‌خواهید این کلاس‌ها را در پروژه خود استفاده کنید. ابتدا، باید نمونه‌ای از کلاس User را ایجاد کنید، سپس، عملیات موردنظر را انجام دهید. برای نمونه، افزودن کاربر جدید، نمایش لیست کاربران، ویرایش اطلاعات و حذف یک کاربر، به صورت زیر است:
php  
// نمونه‌سازی کلاس User
$userModel = new User();
// افزودن کاربر
$userModel->create('Ali Reza', 'ali@example.com');
// نمایش تمام کاربران
$users = $userModel->getAll();
foreach ($users as $user) {
echo "ID: {$user['id']} - Name: {$user['name']} - Email: {$user['email']}<br>";
}
// بروزرسانی کاربر
$userModel->update(1, 'Ali Reza Modir', 'ali.modir@example.com');
// حذف کاربر
$userModel->delete(2);

در این نمونه، کدهای ساده و قابل فهم، عملیات‌های مختلف را نشان می‌دهند و در عین حال، اطمینان از امنیت و کارایی در اجرای عملیات‌ها برقرار است.

مزایای استفاده از این رویکرد


استفاده از PHP OOP و SQLite3 برای ساختن این نوع سیستم، چندین مزیت دارد. اولاً، ساختار کدها سازمان‌یافته و قابل توسعه است. ثانیاً، کدهای جداگانه برای هر عملیات، نگهداری و اشکال‌زدایی را آسان‌تر می‌کند. ثالثاً، بهره‌گیری از prepared statements، امنیت سیستم را در مقابل حملات SQL injection تضمین می‌نماید. در نهایت، سادگی و سبک بودن SQLite3، آن را برای پروژه‌های کوچک و متوسط ایده‌آل می‌سازد.

نتیجه‌گیری


در کل، پیاده‌سازی عملیات CRUD در PHP با رویکرد OOP و پایگاه داده SQLite3، نمونه‌ای کامل، امن و قابل توسعه است. این روش، به توسعه‌دهندگان کمک می‌کند که برنامه‌هایی منسجم، قابل خواندن و امن بسازند. همچنین، با توجه به سادگی پیاده‌سازی و مدیریت، این رویکرد، گزینه‌ای عالی برای پروژه‌های نمونه‌سازی، آموزش و حتی پروژه‌های کوچک است. در نهایت، استفاده صحیح از اصول OOP و پایگاه داده‌های سبک، مسیر موفقیت در توسعه برنامه‌های وب را هموار می‌سازد.