عملیات پایگاه داده
بررسی اجمالی
Section titled “بررسی اجمالی”XOOPS یک لایه انتزاعی پایگاه داده را فراهم می کند که از الگوهای رویه ای قدیمی و رویکردهای شی گرا مدرن پشتیبانی می کند. این راهنما عملیات رایج پایگاه داده برای توسعه ماژول را پوشش می دهد.
اتصال به پایگاه داده
Section titled “اتصال به پایگاه داده”دریافت نمونه پایگاه داده
Section titled “دریافت نمونه پایگاه داده”// Legacy approachglobal $xoopsDB;
// Modern approach via helper$db = \XoopsDatabaseFactory::getDatabaseConnection();
// Via XMF helper$helper = \XMF\Module\Helper::getHelper('mymodule');$db = $GLOBALS['xoopsDB'];عملیات اساسی
Section titled “عملیات اساسی”پرس و جوها را انتخاب کنید
Section titled “پرس و جوها را انتخاب کنید”// Simple query$sql = "SELECT * FROM " . $db->prefix('mymodule_items') . " WHERE status = 1";$result = $db->query($sql);
while ($row = $db->fetchArray($result)) { echo $row['title'];}
// With parameters (safe approach)$sql = sprintf( "SELECT * FROM %s WHERE id = %d", $db->prefix('mymodule_items'), intval($id));
// Single row$sql = "SELECT * FROM " . $db->prefix('mymodule_items') . " WHERE id = " . intval($id);$result = $db->query($sql);$row = $db->fetchArray($result);عملیات درج
Section titled “عملیات درج”// Basic insert$sql = sprintf( "INSERT INTO %s (title, content, created) VALUES (%s, %s, %d)", $db->prefix('mymodule_items'), $db->quoteString($title), $db->quoteString($content), time());$db->queryF($sql);
// Get last insert ID$newId = $db->getInsertId();عملیات به روز رسانی
Section titled “عملیات به روز رسانی”$sql = sprintf( "UPDATE %s SET title = %s, updated = %d WHERE id = %d", $db->prefix('mymodule_items'), $db->quoteString($title), time(), intval($id));$db->queryF($sql);
// Check affected rows$affectedRows = $db->getAffectedRows();عملیات حذف
Section titled “عملیات حذف”$sql = sprintf( "DELETE FROM %s WHERE id = %d", $db->prefix('mymodule_items'), intval($id));$db->queryF($sql);با استفاده از معیارها
Section titled “با استفاده از معیارها”سیستم Criteria یک روش ایمن برای ایجاد پرس و جو ارائه می دهد:
use Criteria;use CriteriaCompo;
// Simple criteria$criteria = new Criteria('status', 1);$items = $itemHandler->getObjects($criteria);
// Compound criteria$criteria = new CriteriaCompo();$criteria->add(new Criteria('status', 1));$criteria->add(new Criteria('category_id', $categoryId));$criteria->setSort('created');$criteria->setOrder('DESC');$criteria->setLimit(10);$criteria->setStart($offset);
$items = $itemHandler->getObjects($criteria);$count = $itemHandler->getCount($criteria);اپراتورهای معیار
Section titled “اپراتورهای معیار”| اپراتور | توضیحات |
|---|---|
= | برابر (پیش فرض) |
!= | برابر نیست |
< | کمتر از |
> | بزرگتر از |
<= | کمتر یا مساوی |
>= | بزرگتر یا مساوی |
LIKE | تطبیق الگو |
IN | در مجموعه مقادیر |
// LIKE criteria$criteria = new Criteria('title', '%search%', 'LIKE');
// IN criteria$criteria = new Criteria('id', '(1,2,3)', 'IN');
// Date range$criteria = new CriteriaCompo();$criteria->add(new Criteria('created', $startDate, '>='));$criteria->add(new Criteria('created', $endDate, '<='));کنترل کننده اشیا
Section titled “کنترل کننده اشیا”روش های هندلر
Section titled “روش های هندلر”$handler = xoops_getModuleHandler('item', 'mymodule');
// Create new object$item = $handler->create();
// Get by ID$item = $handler->get($id);
// Get multiple$items = $handler->getObjects($criteria);
// Get as array$items = $handler->getAll($criteria);
// Count$count = $handler->getCount($criteria);
// Save$success = $handler->insert($item);
// Delete$success = $handler->delete($item);روش های کنترل کننده سفارشی
Section titled “روش های کنترل کننده سفارشی”class ItemHandler extends \XoopsPersistableObjectHandler{ public function getPublished(int $limit = 10): array { $criteria = new CriteriaCompo(); $criteria->add(new Criteria('status', 'published')); $criteria->setSort('publish_date'); $criteria->setOrder('DESC'); $criteria->setLimit($limit);
return $this->getObjects($criteria); }
public function getByCategory(int $categoryId): array { $criteria = new Criteria('category_id', $categoryId); return $this->getObjects($criteria); }}معاملات
Section titled “معاملات”// Begin transaction$db->query('START TRANSACTION');
try { // Perform multiple operations $db->queryF($sql1); $db->queryF($sql2); $db->queryF($sql3);
// Commit if all succeed $db->query('COMMIT');} catch (\Exception $e) { // Rollback on error $db->query('ROLLBACK'); throw $e;}بیانیه های آماده (مدرن)
Section titled “بیانیه های آماده (مدرن)”// Using PDO through XOOPS database layer$sql = "SELECT * FROM " . $db->prefix('mymodule_items') . " WHERE id = :id";$stmt = $db->prepare($sql);$stmt->execute(['id' => $id]);$row = $stmt->fetch(PDO::FETCH_ASSOC);مدیریت طرحواره
Section titled “مدیریت طرحواره”ایجاد جداول
Section titled “ایجاد جداول”-- sql/mysql.sqlCREATE TABLE `{PREFIX}_mymodule_items` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `title` VARCHAR(255) NOT NULL, `content` TEXT, `status` ENUM('draft', 'published', 'archived') DEFAULT 'draft', `author_id` INT(11) UNSIGNED NOT NULL, `created` INT(11) UNSIGNED NOT NULL, `updated` INT(11) UNSIGNED DEFAULT NULL, PRIMARY KEY (`id`), INDEX `idx_status` (`status`), INDEX `idx_author` (`author_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;مهاجرت
Section titled “مهاجرت”return new class { public function up(\XoopsDatabase $db): void { $sql = "CREATE TABLE IF NOT EXISTS " . $db->prefix('mymodule_items') . " ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, created INT UNSIGNED NOT NULL )"; $db->queryF($sql); }
public function down(\XoopsDatabase $db): void { $sql = "DROP TABLE IF EXISTS " . $db->prefix('mymodule_items'); $db->queryF($sql); }};بهترین شیوه ها
Section titled “بهترین شیوه ها”- ** رشته ها را همیشه نقل قول کنید ** - از
$db->quoteString()برای ورودی کاربر استفاده کنید - از Intval استفاده کنید - اعداد صحیح را با
intval()ارسال کنید یا اعلانهای نوع - Prefer Handlers - در صورت امکان از کنترل کننده های شی بر روی SQL خام استفاده کنید
- استفاده از معیارها - ساخت پرس و جو با معیارها برای ایمنی نوع
- **Errors Handle ** - مقادیر بازگشتی را بررسی کنید و خرابی ها را مدیریت کنید
- استفاده از تراکنش ها - عملیات مرتبط را در تراکنش ها بپیچید
مستندات مرتبط
Section titled “مستندات مرتبط”- ../04-API-Reference/Kernel/Criteria - ساخت پرس و جو با معیارها
- ../04-API-Reference/Core/XoopsObjectHandler - الگوی هندلر
- ../02-Core-Concepts/Database/Database-Layer - انتزاع پایگاه داده
- Database/Database-Schema - راهنمای طراحی طرحواره