Перейти к содержимому

Класс 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)

Параметры:

ПараметрТипОписание
$sqlstringSQL запрос для выполнения
$limitintМаксимальное количество строк
$startintНачальное смещение

Пример:

$db = XoopsDatabaseFactory::getDatabaseConnection();
$result = $db->query("SELECT * FROM " . $db->prefix('users'));
if ($result) {
while ($row = $db->fetchArray($result)) {
echo $row['username'];
}
}

Получает строку результата как ассоциативный массив.

public function fetchArray($result): ?array

Пример:

$result = $db->query("SELECT * FROM " . $db->prefix('users'));
while ($row = $db->fetchArray($result)) {
echo $row['uname']; // Доступ по имени колонки
}

Получает строку результата как объект.

public function fetchObject($result): ?object

Пример:

$result = $db->query("SELECT * FROM " . $db->prefix('users'));
while ($obj = $db->fetchObject($result)) {
echo $obj->uname; // Доступ через свойства объекта
}

Получает количество строк в результате.

public function getRowsNum($result): int

Пример:

$result = $db->query("SELECT * FROM " . $db->prefix('users'));
echo "Найдено " . $db->getRowsNum($result) . " пользователей";

Получает количество затронутых строк последней операции.

public function getAffectedRows(): int

Пример:

$db->query("UPDATE " . $db->prefix('users') . " SET level = 1");
echo "Обновлено " . $db->getAffectedRows() . " строк";

Получает 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();
}
  1. Используйте QueryBuilder - Для сложных запросов используйте QueryBuilder вместо сырого SQL
  2. Всегда экранируйте - Используйте escape() для пользовательского ввода
  3. Используйте подготовленные операторы - Предпочитайте параметризованные запросы
  4. Обработка ошибок - Проверяйте результаты запросов
  5. Используйте транзакции - Для нескольких связанных операций
  • QueryBuilder - Современное построение запросов
  • Criteria - Система построения критериев запроса
  • ../Core/XoopsObject - Объекты данных

См. также: API БД XOOPS