Класс XoopsDatabase
Класс XoopsDatabase предоставляет уровень абстракции БД для XOOPS, обрабатывая управление соединением, выполнение запросов, обработку результатов и обработку ошибок. Он поддерживает несколько драйверов БД через архитектуру драйверов.
Обзор класса
Заголовок раздела «Обзор класса»namespace Xoops\Database;
abstract class XoopsDatabase{ protected $conn; protected $prefix; protected $logger;
abstract public function connect(bool $selectdb = true): bool; abstract public function query(string $sql, int $limit = 0, int $start = 0); abstract public function fetchArray($result): ?array; abstract public function fetchObject($result): ?object; abstract public function getRowsNum($result): int; abstract public function getAffectedRows(): int; abstract public function getInsertId(): int; abstract public function escape(string $string): string;}Иерархия класса
Заголовок раздела «Иерархия класса»XoopsDatabase (Абстрактная база)├── XoopsMySQLDatabase (Расширение MySQL)│ └── XoopsMySQLDatabaseProxy (Прокси безопасности)└── XoopsMySQLiDatabase (Расширение MySQLi) └── XoopsMySQLiDatabaseProxy (Прокси безопасности)
XoopsDatabaseFactory└── Создает экземпляры соответствующих драйверовПолучение экземпляра БД
Заголовок раздела «Получение экземпляра БД»Использование фабрики
Заголовок раздела «Использование фабрики»// Рекомендуется: используйте фабрику$db = XoopsDatabaseFactory::getDatabaseConnection();Основные методы
Заголовок раздела «Основные методы»Выполняет SQL запрос.
public function query(string $sql, int $limit = 0, int $start = 0)Параметры:
| Параметр | Тип | Описание |
|---|---|---|
$sql | string | SQL запрос для выполнения |
$limit | int | Максимальное количество строк |
$start | int | Начальное смещение |
Пример:
$db = XoopsDatabaseFactory::getDatabaseConnection();$result = $db->query("SELECT * FROM " . $db->prefix('users'));
if ($result) { while ($row = $db->fetchArray($result)) { echo $row['username']; }}fetchArray
Заголовок раздела «fetchArray»Получает строку результата как ассоциативный массив.
public function fetchArray($result): ?arrayПример:
$result = $db->query("SELECT * FROM " . $db->prefix('users'));while ($row = $db->fetchArray($result)) { echo $row['uname']; // Доступ по имени колонки}fetchObject
Заголовок раздела «fetchObject»Получает строку результата как объект.
public function fetchObject($result): ?objectПример:
$result = $db->query("SELECT * FROM " . $db->prefix('users'));while ($obj = $db->fetchObject($result)) { echo $obj->uname; // Доступ через свойства объекта}getRowsNum
Заголовок раздела «getRowsNum»Получает количество строк в результате.
public function getRowsNum($result): intПример:
$result = $db->query("SELECT * FROM " . $db->prefix('users'));echo "Найдено " . $db->getRowsNum($result) . " пользователей";getAffectedRows
Заголовок раздела «getAffectedRows»Получает количество затронутых строк последней операции.
public function getAffectedRows(): intПример:
$db->query("UPDATE " . $db->prefix('users') . " SET level = 1");echo "Обновлено " . $db->getAffectedRows() . " строк";getInsertId
Заголовок раздела «getInsertId»Получает ID последней вставленной строки.
public function getInsertId(): intПример:
$sql = "INSERT INTO " . $db->prefix('users') . " (uname, email) VALUES ('john', 'john@example.com')";$db->query($sql);$newId = $db->getInsertId();echo "Вставлен ID: " . $newId;Экранирует строку для безопасного использования в SQL.
public function escape(string $string): stringПример:
$username = $_POST['username'];$escaped = $db->escape($username);$result = $db->query("SELECT * FROM " . $db->prefix('users') . " WHERE uname = '" . $escaped . "'");Вспомогательные методы
Заголовок раздела «Вспомогательные методы»Возвращает название таблицы с префиксом БД.
public function prefix(string $tablename): stringПример:
$table = $db->prefix('users'); // xoops_users$sql = "SELECT * FROM " . $table;Получает последнюю ошибку БД.
public function error(): stringПример:
if (!$result) { echo "Ошибка БД: " . $db->error();}Лучшие практики
Заголовок раздела «Лучшие практики»- Используйте QueryBuilder - Для сложных запросов используйте QueryBuilder вместо сырого SQL
- Всегда экранируйте - Используйте
escape()для пользовательского ввода - Используйте подготовленные операторы - Предпочитайте параметризованные запросы
- Обработка ошибок - Проверяйте результаты запросов
- Используйте транзакции - Для нескольких связанных операций
Связанная документация
Заголовок раздела «Связанная документация»- QueryBuilder - Современное построение запросов
- Criteria - Система построения критериев запроса
- ../Core/XoopsObject - Объекты данных
См. также: API БД XOOPS