תפעול מסד נתונים
סקירה כללית
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 “פעולות בסיסיות”SELECT שאילתות
Section titled “SELECT שאילתות”// 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);INSERT פעולות
Section titled “INSERT פעולות”// 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();UPDATE פעולות
Section titled “UPDATE פעולות”$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();DELETE פעולות
Section titled “DELETE פעולות”$sql = sprintf( "DELETE FROM %s WHERE id = %d", $db->prefix('mymodule_items'), intval($id));$db->queryF($sql);שימוש בקריטריונים
Section titled “שימוש בקריטריונים”מערכת הקריטריונים מספקת דרך בטוחה לפי סוג לבניית שאילתות:
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 - מספרים שלמים Cast עם
intval()או הצהרות סוג - העדפת מטפלים - השתמש במטפלי אובייקטים על פני SQL גולמי כאשר אפשר
- השתמש בקריטריונים - צור שאילתות עם קריטריונים לבטיחות סוג
- טיפול בשגיאות - בדוק ערכי החזר וטפל בכשלים
- השתמש בעסקאות - עטוף פעולות הקשורות בעסקאות
תיעוד קשור
Section titled “תיעוד קשור”- ../04-API-Reference/Kernel/Criteria - בניין שאילתות עם קריטריונים
- ../04-API-Reference/Core/XoopsObjectHandler - תבנית מטפל
- ../02-Core-Concepts/Database/Database-Layer - הפשטת מסד נתונים
- Database/Database-Schema - מדריך עיצוב סכימה