Yii и MSSQL
Yii и MSSQL
День добрый.
Возникла необходимость создать webapp с хранением данных в БД MSSQL...
Все нормально запустилось, установилось соединение. Запустил утилиту yiic, и попробовал с ее помощью создать model и crud операции для нескольких таблиц БД. И вот возникла проблема: все строковые данные (на русском языке) просто не отображаются. Я было предположил, что проблема с кодировкой... Но в БД тип поля nvarchar (ну типа с поддержкой unicode) и страницы генерятся в кодировке utf-8... Теперь не знаю, что и думать.. Кто знает, в чем проблема?
PS: По-моему mssql плохо сочетается с php: заметил, что соответствие типов подбирается отвратительно. Вот, к примеру, в БД есть поля типа smalldatetime, а Yii определил это поле как string, странно как-то...
Возникла необходимость создать 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
На хабре только что была статья на эту тему: http://habrahabr.ru/blogs/php/75776/
Но т.к. у нас используется PDO, по идее достаточно обновить драйвер: http://www.microsoft.com/downloads/deta ... laylang=en
Но т.к. у нас используется PDO, по идее достаточно обновить драйвер: http://www.microsoft.com/downloads/deta ... laylang=en
Нравится Yii? Давайте сделаем его лучше!.
Re: Yii и MSSQL
А разве этот инсталлятор SQL Server Driver for PHP содержит pdo драйвер?
В настройках php я подключил расширения php_mssql.dll и php_pdo_mssql.dll. А в этом паке находятся файлы типа такого php_sqlsrv_ts.dll и php_sqlsrv.dll. Их надо вместо какого-то из предыдущего заменить или дополнительно к тем двум?
В настройках php я подключил расширения php_mssql.dll и php_pdo_mssql.dll. А в этом паке находятся файлы типа такого php_sqlsrv_ts.dll и php_sqlsrv.dll. Их надо вместо какого-то из предыдущего заменить или дополнительно к тем двум?
Re: Yii и MSSQL
sqlsrv не имеет отношения к PDO.
Это нативный драйвер для MSSQL со своими функциями и использующий дополнительные возможности, предоставляемые MSSQL.
Для его использования есть реализация в ZendFramework.
Версия sqlsrv 1.1 работает и в PHP 5.3
Кстати, в архиве PHP 5.3 не было драйверов для mssql, в новой версии 5.3.1 они появились...
Это нативный драйвер для MSSQL со своими функциями и использующий дополнительные возможности, предоставляемые MSSQL.
Для его использования есть реализация в ZendFramework.
Версия sqlsrv 1.1 работает и в PHP 5.3
Кстати, в архиве PHP 5.3 не было драйверов для mssql, в новой версии 5.3.1 они появились...
[Редкие] Записки пещерного человека
Re: Yii и MSSQL
Чето я не понял: те приведенные выше две ссылки не имеют никакого отношения к Yii ? они мне тут ничем не помогут?
Re: Yii и MSSQL
Тут дело не драйвере уже, а в кодировках.
В представлении строка выводится так: <?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' и вот что получилось:
Я правильно сделал? потому что у меня теперь почему-то снова все ромбиками отображается....
В представлении строка выводится так: <?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',
....
);
-
- Сообщения: 1428
- Зарегистрирован: 2009.08.20, 22:54
- Откуда: Молдова, Бельцы
- Контактная информация:
Re: Yii и MSSQL
Ты на верном пути. Только укажи utf-8
Re: Yii и MSSQL
да я на верном пути, и нужна именно кодировка windows-1251, потому что mssql выдает данные именно в ней, на сколько я понял SQL Server не понимает кодировку utf-8. А с windows-1251 теперь все работает )
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Yii и MSSQL
SQL Server понимает кодировку utf-8 в полях типа nvarchar с записанными в них данными в UTF-8. Если у вас это не так, то использовать надо 1251 т.к. конвертировать всё на лету MSSQL не умеет.
Нравится Yii? Давайте сделаем его лучше!.
Re: Yii и MSSQL
Да. Именно поэтому я использовал поля типа nvarchar и хотя файл sql-скрипта я преобразовал в utf-8, все равно он возвращал данные в 1251... Может я где-то и прогнал, не знаю... ну сейчас сайт переключил на кодировку 1251 и все нормально работает.
А вот у меня появился еще вопрос. А как на счет хранимых процедур и функций? Тут, насколько я понимаю, Active Record мне ничем не поможет. Как же мне тогда создать модель? PDO запросы типа "EXEC procname paramValue1, paramValue2" и "SELECT funcName(param1, param2)" выполняются нормально, только я не могу понять как мне создать модель, которая не наследуется ни от CAtiveRecord ни от CFormModel (я насколько понял из документации, то моя модель должна быть пронаследована от одного из этих классов, или я ошибаюсь?).
А вот у меня появился еще вопрос. А как на счет хранимых процедур и функций? Тут, насколько я понимаю, Active Record мне ничем не поможет. Как же мне тогда создать модель? PDO запросы типа "EXEC procname paramValue1, paramValue2" и "SELECT funcName(param1, param2)" выполняются нормально, только я не могу понять как мне создать модель, которая не наследуется ни от CAtiveRecord ни от CFormModel (я насколько понял из документации, то моя модель должна быть пронаследована от одного из этих классов, или я ошибаюсь?).
Re: Yii и MSSQL
Угу, спасибо. Это я видел, но подумал что он как абстрактный класс. Во всех примерах модель наследуется именно от тех двух классов. А есть где-то пример модели на основе класса CModel, какие там надо методы переопределить, где указать загрузку данных с БД и т.п.?
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Yii и MSSQL
CModel сама по себе с БД не работает, это не ActiveRecord. т.е. надо будет написать кучку своих методов, получая в них соединение так:
Код: Выделить всё
$db = Yii::app->db;
Нравится Yii? Давайте сделаем его лучше!.
Re: Yii и MSSQL
Как получить доступ к БД я читал в других статьях. А я вот как раз и спрашивал, какие методы надо будет прописывать?
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Yii и MSSQL
attributeLabels(), rules(), safeAttributes() и другие нужные вам: http://www.yiiframework.com/doc/api/1.0.10/CModel
Нравится Yii? Давайте сделаем его лучше!.
Re: Yii и MSSQL
Возник такой вопрос: возможно ли создать форму на основе CHtml, которая не привязана к модели. Я планирую, что будет форма, на основании данных из которой я буду делать некоторый запрос к БД (выполнять хранимую процедуру ) и полученные данные рендерить. Но набор колонок, возвращаемых процедурой, практически каждый раз разный (как их количество, так и название и тип). И таких форм будет немало... Или есть какой-то более лучший, рациональный способ решить эту проблему?
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: Yii и MSSQL
А почему нет? CHtml никак не завязан на модели. Как решение, создать виджет который будет получать массив, виджет парсит массив и выдает форму.
Жду Yii 3!
Re: Yii и MSSQL
Но первым параметром элементов управления (activeLabel, activeTextField, activeDropDownList и т.д.) нужно указать модель....
Re: Yii и MSSQL
упс... а я и не заметил... спс, ща попробую )