Вход Регистрация
Файл: upload/core/DataADP/core.php
Строк: 583
<?php
class DataADP
{
    private static 
$instance null;
    private 
$pdo;

    public function 
__construct($host$dbname$username$password$options = [])
    {
        try {
            
$dsn "mysql:host=$host;dbname=$dbname;charset=utf8mb4";
            
$defaultOptions = [
                
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
                
PDO::ATTR_EMULATE_PREPARES => false,
            ];
            
$options array_replace($defaultOptions$options);
            
$this->pdo = new PDO($dsn$username$password$options);
        } catch (
PDOException $e) {
            
error_log("Ошибка соединения с БД: " $e->getMessage());
            
$this->pdo null;
        }
    }

    public static function 
init($host$dbname$username$password$options = [])
    {
        if (
self::$instance === null) {
            
self::$instance = new self($host$dbname$username$password$options);
        }
    }

    public static function 
getInstance()
    {
        return 
self::$instance;
    }

    public function 
isInitialized()
    {
        return isset(
$this->pdo);
    }

    
// Метод подготовки и выполнения запроса
    
public function dbquery($query$params = [])
    {
        if (!
$this->isInitialized()) {
            return 
false;
        }

        try {
            
$stmt $this->pdo->prepare($query);
            
$stmt->execute($params);
            return 
$stmt;
        } catch (
PDOException $e) {
            
error_log("Ошибка запроса: " $e->getMessage());
            return 
false;
        }
    }

    
// Получение последней вставленной записи
    
public function InGetLastInsertId()
    {
        if (!
$this->isInitialized()) {
            return 
false;
        }

        try {
            return 
$this->pdo->lastInsertId();
        } catch (
PDOException $e) {
            
error_log("Ошибка получения последнего ID: " $e->getMessage());
            return 
false;
        }
    }

    
// Получение числа затронутых строк (аналог mysql_affected_rows())
    
public function affectedRows($stmt)
    {
        if (
$stmt === false) {
            return 
0;
        }

        return 
$stmt->rowCount();
    }
    
    public function 
selectDB($dbname)
    {
        if (!
$this->isInitialized()) {
            return 
false;
        }
        
        try {
            
$this->pdo->exec("USE `$dbname`");
            return 
true;
        } catch (
PDOException $e) {
            
error_log("Ошибка выбора БД: " $e->getMessage());
            return 
false;
        }
    }

    
// Получение метаданных поля (аналог mysql_field_*())
    
public function fieldMetadata($stmt$colIndex 0)
    {
        if (
$stmt === false) {
            return 
null;
        }

        return 
$stmt->getColumnMeta($colIndex);
    }

    
// Выборка массива ассоциативных данных (аналог mysql_fetch_assoc())
    
public function FetchAssoc($stmt)
    {
        if (
$stmt === false) {
            return 
null;
        }

        return 
$stmt->fetch(PDO::FETCH_ASSOC);
    }
    
    public function 
DataFetchAll($stmt)
    {
        if (
$stmt === false) {
            return [];
        }

        return 
$stmt->fetchAll(PDO::FETCH_ASSOC);
    }
    
    public function 
DataFetchColumn($stmt)
    {
        if (
$stmt === false) {
            return 
null;
        }

        return 
$stmt->fetchColumn();
    }

    
// Выборка конкретной ячейки (аналог mysql_result())
    
public function DataResult($stmt$row 0$field 0)
    {
        if (
$stmt === false) {
            return 
null;
        }

        
// Сначала пробуем вытащить всю строку
        
$result $stmt->fetch(PDO::FETCH_BOTH);

        
// Если результат пуст или содержит только одно значение
        
if ($result === false || count($result) <= 1) {
            return 
$result reset($result) : null// Берем первое значение
        
}

        
// Иначе возвращаем указанное поле
        
return ($result && isset($result[$field])) ? $result[$field] : null;
    }

    
// Число выбранных строк (аналог mysql_num_rows())
    
public function DataNumRows($stmt)
    {
        if (
$stmt === false) {
            return 
0// Пропуск
        
}

        return 
$stmt->rowCount();
    }

    
// Закрытие текущего подключения (аналог mysql_close())
    
public function DataCloseConnection()
    {
        if (
$this->isInitialized()) {
            
$this->pdo null;
        }
    }

    
// Экранирование значения (аналог mysql_real_escape_string())
    
public function DataEscapeString($value)
    {
        if (!
$this->isInitialized()) {
            return 
'';
        }

        return 
$this->pdo->quote($value);
    }

    
// Информация о клиентской библиотеке (аналог mysql_get_client_info())
    
public function clientVersion()
    {
        if (!
$this->isInitialized()) {
            return 
'';
        }

        return 
$this->pdo->getAttribute(PDO::ATTR_CLIENT_VERSION);
    }

    
// Установка набора символов (аналог mysql_set_charset())
    
public function setCharset($charset)
    {
        if (!
$this->isInitialized()) {
            return 
false;
        }

        try {
            
$this->pdo->exec("SET NAMES '$charset'");
            return 
true;
        } catch (
PDOException $e) {
            
error_log("Ошибка установки набора символов: " $e->getMessage());
            return 
false;
        }
    }

    
// Выполнить транзакцию (аналог mysql_begin_trans()/mysql_commit()/mysql_rollback())
    
public function DataBeginTransaction()
    {
        if (!
$this->isInitialized()) {
            return 
false;
        }

        try {
            
$this->pdo->beginTransaction();
            return 
true;
        } catch (
PDOException $e) {
            
error_log("Ошибка начала транзакции: " $e->getMessage());
            return 
false;
        }
    }

    public function 
DataCommit()
    {
        if (!
$this->isInitialized()) {
            return 
false;
        }

        try {
            
$this->pdo->commit();
            return 
true;
        } catch (
PDOException $e) {
            
error_log("Ошибка завершения транзакции: " $e->getMessage());
            return 
false;
        }
    }

    public function 
DataRollBack()
    {
        if (!
$this->isInitialized()) {
            return 
false;
        }

        try {
            
$this->pdo->rollBack();
            return 
true;
        } catch (
PDOException $e) {
            
error_log("Ошибка отката транзакции: " $e->getMessage());
            return 
false;
        }
    }

    
// Проверка состояния соединения (аналог mysql_ping())
    
public function DataPing()
    {
        if (!
$this->isInitialized()) {
            return 
false;
        }

        try {
            
$this->pdo->query("SELECT 1");
            return 
true;
        } catch (
PDOException $e) {
            
error_log("Ошибка проверки соединения: " $e->getMessage());
            return 
false;
        }
    }

    
// Список таблиц (аналог mysql_list_tables())
    
public function listTables()
    {
        if (!
$this->isInitialized()) {
            return 
false;
        }

        try {
            
$stmt $this->pdo->query("SHOW TABLES");
            return 
$stmt->fetchAll(PDO::FETCH_COLUMN);
        } catch (
PDOException $e) {
            
error_log("Ошибка получения списка таблиц: " $e->getMessage());
            return 
false;
        }
    }

    
// Очистка ресурсов (аналог mysql_free_result())
    
public function freeResult(&$stmt)
    {
        if (
$stmt !== false) {
            
$stmt null;
        }
    }

    
// Получить версию сервера (аналог mysql_get_server_info())
    
public function serverVersion()
    {
        if (!
$this->isInitialized()) {
            return 
'';
        }

        return 
$this->pdo->getAttribute(PDO::ATTR_SERVER_VERSION);
    }

    
// Перечисление полей таблицы (аналог mysql_list_fields())
    
public function listFields($tableName)
    {
        if (!
$this->isInitialized()) {
            return 
false;
        }

        try {
            
$stmt $this->pdo->query("DESC $tableName");
            return 
$stmt->fetchAll(PDO::FETCH_ASSOC);
        } catch (
PDOException $e) {
            
error_log("Ошибка перечисления полей таблицы: " $e->getMessage());
            return 
false;
        }
    }

    
// Кодировка клиента (аналог mysql_client_encoding())
    
public function clientEncoding()
    {
        if (!
$this->isInitialized()) {
            return 
'';
        }

        return 
$this->pdo->getAttribute(PDO::ATTR_CLIENT_CHARSET);
    }

    
// Список процессов (аналог mysql_list_processes())
    
public function listProcesses()
    {
        if (!
$this->isInitialized()) {
            return 
false;
        }

        try {
            
$stmt $this->pdo->query("SHOW PROCESSLIST");
            return 
$stmt->fetchAll(PDO::FETCH_ASSOC);
        } catch (
PDOException $e) {
            
error_log("Ошибка получения списка процессов: " $e->getMessage());
            return 
false;
        }
    }
}

// Получение числа затронутых строк (аналог mysql_affected_rows())
function affectedRows($stmt)
{
    
$instance DataADP::getInstance();
    if (
$instance === null || !$instance->isInitialized() || !$stmt) {
        return 
0;
    }
    
    
$rows $instance->affectedRows($stmt);
    return 
$rows === false : (int)$rows;
}

// Переключение на указанную базу данных (аналог mysql_select_db())
function selectDB($dbname)
{
    
$instance DataADP::getInstance();
    if (
$instance === null || !$instance->isInitialized()) {
        return 
false;
    }

    return (bool)
$instance->selectDB($dbname);
}

// Закрытие соединения с базой данных (аналог mysql_close())
function DataCloseConnection()
{
    
$instance DataADP::getInstance();
    if (
$instance === null || !$instance->isInitialized()) {
        return 
false;
    }

    return (bool)
$instance->DataCloseConnection();
}

// Получение идентификатора последней вставленной записи (аналог mysql_insert_id())
function InGetLastInsertId()
{
    
$instance DataADP::getInstance();
    if (
$instance === null || !$instance->isInitialized()) {
        return 
0;
    }

    return (int)
$instance->InGetLastInsertId();
}

// Извлечение ассоциированного массива (аналог mysql_fetch_assoc())
function FetchAssoc($stmt)
{
    
$instance DataADP::getInstance();
    if (
$instance === null || !$instance->isInitialized() || !$stmt) {
        return 
null;
    }

    return 
$instance->FetchAssoc($stmt) ?: null;
}

function 
DataFetchAll($stmt)
{
    
$instance DataADP::getInstance();
    if (
$instance === null || !$instance->isInitialized() || !$stmt) {
        return [];
    }
    
    return 
$instance->DataFetchAll($stmt) ?: [];
}

function 
DataFetchColumn($stmt)
{
    
$instance DataADP::getInstance();
    if (
$instance === null || !$instance->isInitialized() || !$stmt) {
        return 
null;
    }

    return 
$instance->DataFetchColumn($stmt);
}

// Извлечение отдельной ячейки (аналог mysql_result())
function DataResult($stmt$row 0$field 0)
{
    
$instance DataADP::getInstance();
    if (
$instance === null || !$instance->isInitialized() || !$stmt) {
        return 
null;
    }

    return 
$instance->DataResult($stmt$row$field);
}

// Количество возвращённых строк (аналог mysql_num_rows())
function DataNumRows($stmt)
{
    
$instance DataADP::getInstance();
    if (
$instance === null || !$instance->isInitialized() || !$stmt) {
        return 
0;
    }
    
    
$rows $instance->DataNumRows($stmt);
    return 
$rows === false : (int)$rows;
}

// Подготовленный запрос (аналог mysql_query())
function dbquery($query$params = [])
{
    
$instance DataADP::getInstance();
    if (
$instance === null || !$instance->isInitialized()) {
        return 
null;
    }

    return 
$instance->dbquery($query$params) ?: null;
}

// Экранирование строк (аналог mysql_real_escape_string())
function DataEscapeString($value)
{
    
$instance DataADP::getInstance();
    if (
$instance === null || !$instance->isInitialized()) {
        return 
'';
    }

    return (string)
$instance->DataEscapeString($value);
}

// Управление набором символов (аналог mysql_set_charset())
function setCharset($charset)
{
    
$instance DataADP::getInstance();
    if (
$instance === null || !$instance->isInitialized()) {
        return 
false;
    }

    return (bool)
$instance->setCharset($charset);
}

// Запуск транзакции (аналог mysql_begin_trans())
function DataBeginTransaction()
{
    
$instance DataADP::getInstance();
    return (
$instance && $instance->isInitialized()) ? (bool)$instance->DataBeginTransaction() : false;
}

// Завершение транзакции (аналог mysql_commit())
function DataCommit()
{
    
$instance DataADP::getInstance();
    return (
$instance && $instance->isInitialized()) ? (bool)$instance->DataCommit() : false;
}

// Откат транзакции (аналог mysql_rollback())
function DataRollBack()
{
    
$instance DataADP::getInstance();
    return (
$instance && $instance->isInitialized()) ? (bool)$instance->DataRollBack() : false;
}

// Информация о состоянии подключения (аналог mysql_ping())
function DataPing()
{
    
$instance DataADP::getInstance();
    return (
$instance && $instance->isInitialized()) ? (bool)$instance->DataPing() : false;
}

// Определение имени активного набора символов (аналог mysql_client_encoding())
function clientEncoding()
{
    
$instance DataADP::getInstance();
    return (
$instance && $instance->isInitialized()) ? (string)$instance->clientEncoding() : '';
}

// Получение версий клиентов и серверов (аналог mysql_get_client_info(), mysql_get_server_info())
function clientVersion()
{
    
$instance DataADP::getInstance();
    return (
$instance && $instance->isInitialized()) ? (string)$instance->clientVersion() : '';
}

function 
serverVersion()
{
    
$instance DataADP::getInstance();
    return (
$instance && $instance->isInitialized()) ? (string)$instance->serverVersion() : '';
}


require_once (
__DIR__ '/db-connect.php');
?>
Онлайн: 5
Реклама