Класс MySQLi
Объект $Data:
Драйвер для работы с базой данных 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 |
|
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();
}