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