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

Класс SqlSrv

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

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

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

Методы

init()

$Data->init();

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

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

Исходный код
    function init() {
        $Conf = $this->Conf();
        if (!extension_loaded('PDO_sqlsrv')) {
            $this->addError('Невозможно открыть базу данных');
            return;
        }
        try {
            $this->data = new \PDO(
                $Conf->get('sql_database'),
                $Conf->get('sql_login'),
                $Conf->get('sql_password'),
                array(
                    \PDO::SQLSRV_ATTR_DIRECT_QUERY => true,
                    \PDO::SQLSRV_ENCODING_UTF8 => true,
                )
            );
        } catch (\PDOException $e) {
            $this->addError('Невозможно открыть базу данных');
            $this->addError($e->getMessage());
            return;
        }
        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 \PDO) return $this->data->quote(strval($text));
        return parent::quote(strval($text));
    }

query()

$Data->query($q);

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

Параметры:

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

запрос

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

Исходный код
    function query($q) {
        if ($this->data instanceof \PDO) {
            $this->clearError();
            if (func_num_args() > 1) {
                $args = func_get_args();
                array_shift($args);
                $q = $this->queryParamsArray($q, $args);
            }
            $this->query = $q = $this->replaceBackticksDoubleQuotes($q);
            $result = $this->data->query($q);
            if (!$result) {
                $this->addError('Ошибка запроса «' . $q . '»');
                $this->addError(implode(' ', $this->data->errorInfo()));
            }
            return $result;
        }
        return false;
    }

numRows()

$Data->numRows(&$result);

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

Параметры:

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

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

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

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

fetch()

$Data->fetch(&$result);

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

Параметры:

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

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

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

Исходный код
    function fetch(&$result) {
        if ($result instanceof \PDOStatement) return $result->fetch(\PDO::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 \PDOStatement) return $result->fetch(\PDO::FETCH_NUM);
        if (is_array($result)) return array_values(array_shift($result));
        return false;
    }

numRowsSQLSrv()

$Data->numRowsSQLSrv($result);

Реализация подсчета строк результата запроса для MS SQL Server.

Параметры:

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

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

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

Исходный код
    function numRowsSQLSrv($result) {
        $query = trim($result->queryString);
        if (strtoupper(substr($query, 0, 6)) === 'SELECT') {
            $q = "SELECT COUNT(*) FROM ( $query ) AS q";
            if ($_result = $this->data->query($q)) {
                if ($row = $_result->fetch()) {
                    return $row[0];
                }
            }
        }
        return $result->rowCount();
    }

tables()

$Data->tables();

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

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

Исходный код
    function tables() {
        $r = array();
        if ($result = $this->query("SELECT table_name AS name FROM information_schema.tables")) {
            while ($row = $this->fetch($result)) {
                $r[$row['name']] = $row['sql'];
            }
        }
        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 \PDOStatement) $result = $this->query("SELECT * FROM `$result` LIMIT 0");
        if ($result) {
            if ($count = $result->columnCount()) for ($i = 0; $i < $count; $i ++) {
                if ($a = $result->getColumnMeta($i)) {
                    $r[] = $a['name'];
                }
            }
        }
        return $r;
    }