Выборка XML полей MSSQL

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
DKeeper
Сообщения: 6
Зарегистрирован: 2013.04.18, 12:39

Выборка XML полей MSSQL

Сообщение DKeeper »

Добрый день.

Имеется база с таблицами, одна из которых содержит поле FDATA, тип которого указан как xml.

Подскажите, как правильно выбрать его значение? При попытке сделать это следующим кодом:

Код: Выделить всё

TOBJECTSTORAGE::find()->select(['FNAME','FLABEL','FDATA'])->where('FTYPENAME = :name',[':name'=>'xxx'])->asArray()->all($mssqlConnect);
 
Получаю следующую ошибку:

Код: Выделить всё

Database Exception – yii\db\Exception

SQLSTATE[HY000]: General error: 4004 General SQL Server error: Check messages from the SQL Server [4004] (severity 16) [(null)]
The SQL being executed was: SELECT [FNAME], [FLABEL], [FDATA] FROM [TOBJECTSTORAGE] WHERE FTYPENAME = 'xxx'
Error Info: Array
(
    [0] => HY000
    [1] => 4004
    [2] => General SQL Server error: Check messages from the SQL Server [4004] (severity 16) [(null)]
    [3] => -1
    [4] => 16
)
↵
Caused by: PDOException

SQLSTATE[HY000]: General error: 4004 General SQL Server error: Check messages from the SQL Server [4004] (severity 16) [(null)]

in /var/www/webdata/smartbc.ru/vendor/yiisoft/yii2/db/Command.php at line 819
При этом запрос

Код: Выделить всё

SELECT [FNAME], [FLABEL], [FDATA] FROM [TOBJECTSTORAGE] WHERE FTYPENAME = 'xxx'
на самом сервере выполняется без проблем.

Попробовал сформировать следующий запрос, что бы вытащить поле как текст (если я верно понимаю, в БД в данном поле хранится ссылка на файл, содержащий нужную информацию).

Код: Выделить всё

TOBJECTSTORAGE::find()->select(['FNAME','FLABEL','CAST(FDATA AS NVARCHAR(MAX)) AS FDATA'])->where('FTYPENAME = :name',[':name'=>'xxx'])->asArray()->all($lyraConnect); 
Ошибка та же самая осталась, хотя на сервере без проблем поле как текст отобразилось.

Буду благодарен, если кто-нибудь подскажет, в каком направлении двигаться дальше.
DKeeper
Сообщения: 6
Зарегистрирован: 2013.04.18, 12:39

Re: Выборка XML полей MSSQL

Сообщение DKeeper »

Проблема актуальна, ни у кого нет идей?
Аватара пользователя
chungachguk
Сообщения: 435
Зарегистрирован: 2012.07.17, 11:52

Re: Выборка XML полей MSSQL

Сообщение chungachguk »

У меня была проблема с MsSql uniqueidentifier полем под линкусом, утилита tsql возвращала нормальный запрос, с нормальным ID, а вот в php всё было печально из-за того что у yii не было описания схемы БД или что-то типа того.
DKeeper
Сообщения: 6
Зарегистрирован: 2013.04.18, 12:39

Re: Выборка XML полей MSSQL

Сообщение DKeeper »

chungachguk писал(а):У меня была проблема с MsSql uniqueidentifier полем под линкусом, утилита tsql возвращала нормальный запрос, с нормальным ID, а вот в php всё было печально из-за того что у yii не было описания схемы БД или что-то типа того.
В файле \vendor\yiisoft\yii2\db\mssql\Schema.php в классе есть поле

Код: Выделить всё

public $typeMap = [
        ...
        // other data types
        // 'cursor' type cannot be used with tables
        'timestamp' => self::TYPE_TIMESTAMP,
        'hierarchyid' => self::TYPE_STRING,
        'uniqueidentifier' => self::TYPE_STRING,
        'sql_variant' => self::TYPE_STRING,
        'xml' => self::TYPE_STRING,
        'table' => self::TYPE_STRING,
    ]; 
Так что, по логике вещей, поле с типом xml должно возвращаться как строка.

На всякий случай приведу выдержки из конфигурации php.

Код: Выделить всё

Additional .ini files parsed    ... /etc/php5/apache2/conf.d/20-mssql.ini ...

mssql

MSSQL Support    enabled
Active Persistent Links    0
Active Links    0
Library version    FreeTDS

Directive    Local Value    Master Value
mssql.allow_persistent    On    On
mssql.batchsize    0    0
mssql.charset    no value    no value
mssql.compatability_mode    Off    Off
mssql.compatibility_mode    Off    Off
mssql.connect_timeout    5    5
mssql.datetimeconvert    On    On
mssql.max_links    Unlimited    Unlimited
mssql.max_persistent    Unlimited    Unlimited
mssql.max_procs    Unlimited    Unlimited
mssql.min_error_severity    10    10
mssql.min_message_severity    10    10
mssql.secure_connection    Off    Off
mssql.textlimit    Server default    Server default
mssql.textsize    Server default    Server default
mssql.timeout    60    60

PDO

PDO support    enabled
PDO drivers    dblib, mysql

pdo_dblib

PDO Driver for FreeTDS/Sybase DB-lib    enabled
Flavour    freetds
И dsn для подключения к БД MSSQL
dblib:host=192.168.1.2:1433;dbname=xxxdb
Skipit
Сообщения: 2
Зарегистрирован: 2015.02.11, 09:12

Re: Выборка XML полей MSSQL

Сообщение Skipit »

Получилось решить проблему?
Ответить