Operacije baze podatkov
Pregled
Section titled “Pregled”XOOPS zagotavlja plast abstrakcije baze podatkov, ki podpira podedovane proceduralne vzorce in sodobne objektno usmerjene pristope. Ta priročnik pokriva običajne operacije baze podatkov za razvoj modulov.
Povezava z bazo podatkov
Section titled “Povezava z bazo podatkov”Pridobivanje primerka baze podatkov
Section titled “Pridobivanje primerka baze podatkov”// Legacy approachglobal $xoopsDB;
// Modern approach via helper$db = \XoopsDatabaseFactory::getDatabaseConnection();
// Via XMF helper$helper = \Xmf\Module\Helper::getHelper('mymodule');$db = $GLOBALS['xoopsDB'];Osnovne operacije
Section titled “Osnovne operacije”SELECT Poizvedbe
Section titled “SELECT Poizvedbe”// 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 Operacije
Section titled “INSERT Operacije”// 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 Operacije
Section titled “UPDATE Operacije”$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 Operacije
Section titled “DELETE Operacije”$sql = sprintf( "DELETE FROM %s WHERE id = %d", $db->prefix('mymodule_items'), intval($id));$db->queryF($sql);Uporaba meril
Section titled “Uporaba meril”Sistem Criteria zagotavlja tipsko varen način za izdelavo poizvedb:
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);Operatorji kriterijev
Section titled “Operatorji kriterijev”| Operater | Opis |
|---|---|
= | Enako (privzeto) |
!= | Ni enako |
< | Manj kot |
> | Večji od |
<= | Manjše ali enako |
>= | Večje ali enako |
LIKE | Ujemanje vzorcev |
IN | V nizu vrednosti |
// 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, '<='));Obdelovalci predmetov
Section titled “Obdelovalci predmetov”Metode obdelovalca
Section titled “Metode obdelovalca”$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);Metode obdelovalca po meri
Section titled “Metode obdelovalca po meri”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); }}Transakcije
Section titled “Transakcije”// 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;}Pripravljene izjave (moderno)
Section titled “Pripravljene izjave (moderno)”// 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);Upravljanje sheme
Section titled “Upravljanje sheme”Ustvarjanje tabel
Section titled “Ustvarjanje tabel”-- 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;Migracije
Section titled “Migracije”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); }};Najboljše prakse
Section titled “Najboljše prakse”- Vedno narekaj nize - Uporabite
$db->quoteString()za uporabniški vnos - Uporabi Intval - Pretvori cela števila z
intval()ali deklaracijami tipa - Prednostni obdelovalci - Uporabite obdelovalnike predmetov namesto neobdelanega SQL, kadar je to mogoče
- Uporabite merila - sestavite poizvedbe s kriteriji za varnost tipov
- Obravnava napak - Preverite povratne vrednosti in obravnavajte napake
- Uporabite transakcije - Zavijte povezane operacije v transakcije
Povezana dokumentacija
Section titled “Povezana dokumentacija”- ../04-API-Reference/Kernel/Criteria - Gradnja poizvedbe s kriteriji
- ../04-API-Reference/Core/XoopsObjectHandler - Vzorec krmilnika
- ../02-Core-Concepts/Database/Database-Layer - Abstrakcija baze podatkov
- Database/Database-Schema - Vodnik za načrtovanje sheme