Файл: 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 ? 0 : (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 ? 0 : (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');
?>