Система управления «Сайт PRO»
Версия 20240107

Класс MySQLi

Объект $Data: Cms\Root\Data\MySQLi наследует Cms\Site\Data\Base

Драйвер для работы с базой данных MySQL.

Исходный код
class MySQLi extends \Cms\Site\Data\Base { … }

Свойства

$debug

$Data->debug = null;

Режим отладки

Исходный код
    var $debug = null;

Методы

init()

$Data->init();

Открытие соединения с базой данных

Возвращает: true; null

Исходный код
    function init() {
        $Conf = $this->Conf();
        if (!extension_loaded('mysqli')) {
            $this->addError('Невозможно открыть базу данных');
            return;
        }
        @$data = new \mysqli(
            $Conf->get('sql_server', 'localhost'),
            $Conf->get('sql_login', 'root'),
            $Conf->get('sql_password'),
            $Conf->get('sql_database')
        );
        if ($e = mysqli_connect_error()) {
            $this->addError('Невозможно открыть базу данных');
            $this->addError($e);
            return;
        }
        $this->data = $data;
        $this->data->set_charset('utf8mb4');
        $this->data->query("SET sql_mode=''");
        if ($Conf->get('sql_debug')) {
            $this->debug = true;
            mysqli_report(MYSQLI_REPORT_INDEX);
        } else {
            mysqli_report(MYSQLI_REPORT_OFF);
        }
        return true;
    }

quote()

$Data->quote($text, $stringNull=true);

Экранирование специальных символов в строке и добавление кавычек

Параметры:

ИмяОписание
$text

строка

$stringNull

конвертировать NULL в пустую строку ''

Возвращает: string

Исходный код
    function quote($text, $stringNull = true) {
        if ($text === null && !$stringNull) return 'NULL';
        if ($this->data instanceof \mysqli) return "'" . $this->data->real_escape_string(strval($text)) . "'";
        return $this->quoteMySQL(strval($text));
    }

query()

$Data->query($q);

Выполнение запроса и получение результата

Параметры:

ИмяОписание
$q

запрос

Возвращает: object; false

Исходный код
    function query($q) {
        if ($this->data instanceof \mysqli) {
            $this->clearError();
            if ($debug = $this->debug) set_error_handler(array($this, 'addReport'));
            if (func_num_args() > 1) {
                $args = func_get_args();
                array_shift($args);
                $q = $this->queryParamsArrayMySQL($q, $args);
            }
            $this->query = $q;
            $result = $this->data->query($q);
            if ($debug) restore_error_handler();
            if (!$result) {
                $this->addError('Ошибка запроса «' . $q . '»');
                $this->addError($this->data->error);
            }
            return $result;
        }
        return false;
    }

queryParamsArray()

$Data->queryParamsArray($query, $params);

Добавление параметров к запросу

Параметры:

ИмяОписание
$query

запрос

$params

параметры

Возвращает: string

Исходный код
    function queryParamsArray($query, $params) {
        return $this->queryParamsArrayMySQL($query, $params);
    }

numRows()

$Data->numRows(&$result);

Количество строк результата запроса

Параметры:

ИмяОписание
$result

результат запроса

Возвращает: int

Исходный код
    function numRows(&$result) {
        if ($result instanceof \mysqli_result) return $result->num_rows;
        if (is_array($result)) return count($result);
        return 0;
    }

fetch()

$Data->fetch(&$result);

Получение следующей строки результата запроса

Параметры:

ИмяОписание
$result

результат запроса

Возвращает: array; false; null

Исходный код
    function fetch(&$result) {
        if ($result instanceof \mysqli_result) return $result->fetch_assoc();
        if (is_array($result)) return array_shift($result);
        return false;
    }

fetchArray()

$Data->fetchArray(&$result);

Получение следующей строки результата запроса

Параметры:

ИмяОписание
$result

результат запроса

Возвращает: array; false; null

Исходный код
    function fetchArray(&$result) {
        if ($result instanceof \mysqli_result) return $result->fetch_array(MYSQLI_NUM);
        if (is_array($result)) return array_shift($result);
        return false;
    }

tables()

$Data->tables();

Список таблиц и их определений

Возвращает: array

Исходный код
    function tables() {
        $r = array();
        if ($result = $this->query("SHOW TABLES")) {
            while ($row = $this->fetch($result)) {
                $table = array_shift($row);
                if ($xresult = $this->query("SHOW CREATE TABLE `$table`")) {
                    if ($xrow = $this->fetch($xresult)) {
                        array_shift($xrow);
                        $r[$table] = array_shift($xrow);
                    }
                }
            }
        }
        return $r;
    }

fields()

$Data->fields($result);

Получение полей запроса

Параметры:

ИмяОписание
$result

результат запроса

Возвращает: array

Исходный код
    function fields($result) {
        $r = array();
        if (is_array($result)) return array_keys(array_shift(array_values($result)));
        if (!$result instanceof \mysqli_result) $result = $this->query("SELECT * FROM `$result` LIMIT 0");
        if ($result) {
            foreach ($result->fetch_fields() as $field) {
                $r[] = $field->name;
            }
        }
        return $r;
    }

insertId()

$Data->insertId();

Значение параметра auto_increment последнего запроса

Возвращает: int; null

Исходный код
    function insertId() {
        if ($this->data instanceof \mysqli) return $this->data->insert_id;
    }

addReport()

$Data->addReport($n, $e);

Сохранение строки запроса, не использующего индексы, в файл в режиме отладки

Параметры:

ИмяОписание
$n

код ошибки

$e

строка ошибки

Возвращает: null

Исходный код
    function addReport($n, $e) {
        if (!$this->_F) {
            $root = $this->root();
            $this->_F = @fopen("$root/cms/noindex.log", "a");
        }
        if ($this->_F) {
            fwrite($this->_F, trim($this->query) . ";\n\n");
            fflush($this->_F);
        }
    }

finish()

$Data->finish(&$result);

Закрытие результата запроса

Параметры:

ИмяОписание
$result

object; array результат запроса

Исходный код
    function finish(&$result) {
        if ($result instanceof \mysqli_result) $result->close();
    }

beginTransaction()

$Data->beginTransaction();

Начало транзакции

Возвращает: boolean

Исходный код
	function beginTransaction() {
		if ($this->data instanceof \mysqli) return $this->data->begin_transaction();
	}

commit()

$Data->commit();

Подтверждение транзакции

Возвращает: boolean

Исходный код
	function commit() {
		if ($this->data instanceof \mysqli) return $this->data->commit();
	}

rollback()

$Data->rollback();

Откат транзакции

Возвращает: boolean

Исходный код
	function rollback() {
		if ($this->data instanceof \mysqli) return $this->data->rollback();
	}