Yii и MSSQL

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
BerdArt
Сообщения: 38
Зарегистрирован: 2009.11.21, 14:31
Откуда: ZP
Контактная информация:

Yii и MSSQL

Сообщение BerdArt »

День добрый.
Возникла необходимость создать webapp с хранением данных в БД MSSQL...
Все нормально запустилось, установилось соединение. Запустил утилиту yiic, и попробовал с ее помощью создать model и crud операции для нескольких таблиц БД. И вот возникла проблема: все строковые данные (на русском языке) просто не отображаются. Я было предположил, что проблема с кодировкой... Но в БД тип поля nvarchar (ну типа с поддержкой unicode) и страницы генерятся в кодировке utf-8... Теперь не знаю, что и думать.. Кто знает, в чем проблема?

PS: По-моему mssql плохо сочетается с php: заметил, что соответствие типов подбирается отвратительно. Вот, к примеру, в БД есть поля типа smalldatetime, а Yii определил это поле как string, странно как-то...
Последний раз редактировалось BerdArt 2009.11.21, 15:09, всего редактировалось 1 раз.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Yii и MSSQL

Сообщение samdark »

На хабре только что была статья на эту тему: http://habrahabr.ru/blogs/php/75776/
Но т.к. у нас используется PDO, по идее достаточно обновить драйвер: http://www.microsoft.com/downloads/deta ... laylang=en
BerdArt
Сообщения: 38
Зарегистрирован: 2009.11.21, 14:31
Откуда: ZP
Контактная информация:

Re: Yii и MSSQL

Сообщение BerdArt »

А разве этот инсталлятор SQL Server Driver for PHP содержит pdo драйвер?
В настройках php я подключил расширения php_mssql.dll и php_pdo_mssql.dll. А в этом паке находятся файлы типа такого php_sqlsrv_ts.dll и php_sqlsrv.dll. Их надо вместо какого-то из предыдущего заменить или дополнительно к тем двум?
Аватара пользователя
Caveman
Сообщения: 152
Зарегистрирован: 2009.04.04, 20:56
Откуда: Москва
Контактная информация:

Re: Yii и MSSQL

Сообщение Caveman »

sqlsrv не имеет отношения к PDO.
Это нативный драйвер для MSSQL со своими функциями и использующий дополнительные возможности, предоставляемые MSSQL.
Для его использования есть реализация в ZendFramework.

Версия sqlsrv 1.1 работает и в PHP 5.3
Кстати, в архиве PHP 5.3 не было драйверов для mssql, в новой версии 5.3.1 они появились...
BerdArt
Сообщения: 38
Зарегистрирован: 2009.11.21, 14:31
Откуда: ZP
Контактная информация:

Re: Yii и MSSQL

Сообщение BerdArt »

Чето я не понял: те приведенные выше две ссылки не имеют никакого отношения к Yii ? они мне тут ничем не помогут?
BerdArt
Сообщения: 38
Зарегистрирован: 2009.11.21, 14:31
Откуда: ZP
Контактная информация:

Re: Yii и MSSQL

Сообщение BerdArt »

Тут дело не драйвере уже, а в кодировках.
В представлении строка выводится так: <?php echo CHtml::encode($model->Title); ?> и результат - пустое значение.
Если я изменю это на: <?php echo $model->Title; ?>, то получу уже не пустую строку а ромбики с вопросительными знаками внутри....
Попробовал написать так: <?php echo iconv('windows-1251', 'utf-8', $model->Title); ?> и все отлично - я увидел нормальный русский текст.
Но не хочется менять в каждом представлении (я создаю их с помощью утилиты yiic ) вывод инфы. Как установить кодировку приложения не UTF-8, как по умолчанию она стоит, а windows-1251. в webroot/protected/config/main.php я добавил строку 'charset'=>'windows-1251' и вот что получилось:

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

return array(
    'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
    'name'=>'My Web Application',
    'charset'=>'windows-1251',
        ....
);
 
Я правильно сделал? потому что у меня теперь почему-то снова все ромбиками отображается....
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Yii и MSSQL

Сообщение Ekstazi »

Ты на верном пути. Только укажи utf-8
BerdArt
Сообщения: 38
Зарегистрирован: 2009.11.21, 14:31
Откуда: ZP
Контактная информация:

Re: Yii и MSSQL

Сообщение BerdArt »

да я на верном пути, и нужна именно кодировка windows-1251, потому что mssql выдает данные именно в ней, на сколько я понял SQL Server не понимает кодировку utf-8. А с windows-1251 теперь все работает )
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Yii и MSSQL

Сообщение samdark »

SQL Server понимает кодировку utf-8 в полях типа nvarchar с записанными в них данными в UTF-8. Если у вас это не так, то использовать надо 1251 т.к. конвертировать всё на лету MSSQL не умеет.
BerdArt
Сообщения: 38
Зарегистрирован: 2009.11.21, 14:31
Откуда: ZP
Контактная информация:

Re: Yii и MSSQL

Сообщение BerdArt »

Да. Именно поэтому я использовал поля типа nvarchar и хотя файл sql-скрипта я преобразовал в utf-8, все равно он возвращал данные в 1251... Может я где-то и прогнал, не знаю... ну сейчас сайт переключил на кодировку 1251 и все нормально работает.

А вот у меня появился еще вопрос. А как на счет хранимых процедур и функций? Тут, насколько я понимаю, Active Record мне ничем не поможет. Как же мне тогда создать модель? PDO запросы типа "EXEC procname paramValue1, paramValue2" и "SELECT funcName(param1, param2)" выполняются нормально, только я не могу понять как мне создать модель, которая не наследуется ни от CAtiveRecord ни от CFormModel (я насколько понял из документации, то моя модель должна быть пронаследована от одного из этих классов, или я ошибаюсь?).
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Yii и MSSQL

Сообщение samdark »

Ещё есть CModel.
BerdArt
Сообщения: 38
Зарегистрирован: 2009.11.21, 14:31
Откуда: ZP
Контактная информация:

Re: Yii и MSSQL

Сообщение BerdArt »

Угу, спасибо. Это я видел, но подумал что он как абстрактный класс. Во всех примерах модель наследуется именно от тех двух классов. А есть где-то пример модели на основе класса CModel, какие там надо методы переопределить, где указать загрузку данных с БД и т.п.?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Yii и MSSQL

Сообщение samdark »

CModel сама по себе с БД не работает, это не ActiveRecord. т.е. надо будет написать кучку своих методов, получая в них соединение так:

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

$db = Yii::app->db;
 
BerdArt
Сообщения: 38
Зарегистрирован: 2009.11.21, 14:31
Откуда: ZP
Контактная информация:

Re: Yii и MSSQL

Сообщение BerdArt »

Как получить доступ к БД я читал в других статьях. А я вот как раз и спрашивал, какие методы надо будет прописывать?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Yii и MSSQL

Сообщение samdark »

attributeLabels(), rules(), safeAttributes() и другие нужные вам: http://www.yiiframework.com/doc/api/1.0.10/CModel
BerdArt
Сообщения: 38
Зарегистрирован: 2009.11.21, 14:31
Откуда: ZP
Контактная информация:

Re: Yii и MSSQL

Сообщение BerdArt »

Возник такой вопрос: возможно ли создать форму на основе CHtml, которая не привязана к модели. Я планирую, что будет форма, на основании данных из которой я буду делать некоторый запрос к БД (выполнять хранимую процедуру ) и полученные данные рендерить. Но набор колонок, возвращаемых процедурой, практически каждый раз разный (как их количество, так и название и тип). И таких форм будет немало... Или есть какой-то более лучший, рациональный способ решить эту проблему?
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Yii и MSSQL

Сообщение slavcodev »

А почему нет? CHtml никак не завязан на модели. Как решение, создать виджет который будет получать массив, виджет парсит массив и выдает форму.
Жду Yii 3!
BerdArt
Сообщения: 38
Зарегистрирован: 2009.11.21, 14:31
Откуда: ZP
Контактная информация:

Re: Yii и MSSQL

Сообщение BerdArt »

Но первым параметром элементов управления (activeLabel, activeTextField, activeDropDownList и т.д.) нужно указать модель....
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Yii и MSSQL

Сообщение slavcodev »

а есть еще и другие методы: label(), textField(), dropDownList.
Жду Yii 3!
BerdArt
Сообщения: 38
Зарегистрирован: 2009.11.21, 14:31
Откуда: ZP
Контактная информация:

Re: Yii и MSSQL

Сообщение BerdArt »

упс... а я и не заметил... спс, ща попробую )
Ответить