The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Доступ из PHP скриптов к MSSQL. (php win sql charset)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: php, win, sql, charset,  (найти похожие документы)
From: das-ich <das-ich@yandex.ru> Newsgroups: email Date: Mon, 21 Oct 2003 14:31:37 +0000 (UTC) Subject: Доступ из PHP скриптов к MSSQL. Сказ про то, как я PHP на MSSQL женил и научил их на одинаковом русском разговаривать. Возникла недавно у меня в конторе потребность, чтобы сайт написанный на PHP, находящийся на FreeBSD, обращался к MSSQL и забирал от туда данные. И сайт и база написаны в вындовозной кодировке, это достаточно существенное замечание, т.к. если бы сайт был написан в родной и горячо любимой KOI8-R, то одной проблемой было бы меньше. Узнать при помощи чего можно совместить работу PHP и MSSQL оказалось достаточно простой задачей. Самым приемлемым и главное халявным программным продуктом оказалась библиотека FreeTDS. Взять ее можно отсюда http://www.freetds.org . Сборка и установка показалась по началу достаточно простым делом, так же как и собрать в месте с ней и Apache и PHP. Но вот именно с этого момента и начались проблемы. С начала при прочтении мануала и настройки соответственно ему файла freetds.conf не дало не каких результатов. PHP как не забирал данные с базы так и не хотел этого делать. После перелопачивания всего русскоязычного инета и перехода на англоязычные сайты, т.к. оказалось, что попытка найти на русском языке хоть какие-то внятные инструкции на этот счет, свелась к одной статье описывающую настройку более старой версии FreeTDS, что абсолютно не способствовало улучшению ситуации, мне все же удалось найти описание правильных настроек файла freetds.conf . После чего PHP стал нормально обращаться к MSSQL, но все еще на Вы, потому что сразу появилась другая проблема. А проблема была в кодировках (на этом месте я предлагаю дружно вспомнить дядю Била и сказать ему большое ╚спасибо╩). Данные из базы почти начисто отказывались отображаться по-русски, показывая вместо себя вопросительные знаки. После более тщательного прочтения мануала по FreeTDS на их родном сайте я обнаружил, что для перекодирования текста она пользуется библиотекой libiconv. После этого осталось пересобрать PHP с поддержкой этой же библиотеки, и проблема почти была решена. Почти потому что если бы сайт был написан в KOI8-R, то дальнейшие действия не пришлось производить, но так как у нас програмеры работают на вынде и соответственно у них все написано в 1251, то Apache все это перекодировал в двух разных кодировках и получалось, что часть документа все время не читалась. Пришлось опять брать бубен и читать, читать, читать. В результате я где-то прочел, что нужно прописать напрямую Apache что б он использовал вындовую кодировку. И после всех этих манипуляций все заработало нормально. Ну, со вступительной частью вроде закончил, теперь просто распишу, что и как. С начала собираем FreeTDS . Версия FreeTDS 0.61 √ последняя на время написания этого документа. Это делается достаточно просто: ./configure √with-tdsver=8.0 (у нас просто MSSQL восьмой версии, а так можно и другой) make и make install Установку Apache и PHP я не буду подробно описывать, благо этой документации в рунете много, а просто напишу необходимые для наших целей параметры. И так для PHP помимо прочих опций нужно добавить: --with-mssql=(здесь путь до директории куда был установлен FreeTDS)/usr/local √ в моем случае --with-iconv для поддержки перекодировки текста И потом можно устанавливать. Apache собирается просто с поддержкой PHP. После этого можно настраивать FreeTDS. В файле freetds.conf прописываем: [global] tds version = 8.0 initial block size = 512 swap broken dates = no swap broken money = no try server login = yes у меня используется аутентификация на сервере try domain login = no а не на домене cross domain login = no text size = 64512 [mssql] host = (здесь пишется ip вашего компьютера не котором стоит FreeTDS, если на нем два и более интерефейса, то пишется ip локальной сети) port = 1433 (стандартный порт MSSQL) tds version = 8.0 На этом с настройкой FreeTDS покончено. Осталось прописать только один параметр в настройках Apache. Не забудьте перед этим поставить локаль CP1251, так как по умолчанию с FreeBSD она не идет. В файле apachectl пишем: LANG=ru_RU.CP1251; export LANG LC_ALL=ru_RU.CP1251; export LC_ALL Этим мы привязываем локаль CP1251 к Apache для нормальной перекодировки. И все можем запускать и проверять - все должно работать. Всяческие вопросы можно задавать по адресу das-ich@yandex.ru З.Ы. И вот совсем недавно я нашел один документ, но в нем написано как подключать все тоже, но к Linux. Так-то можете почитать, если нужно ставить на Linux http://www.opennet.ru/base/dev/mssql_php.txt.html Das-ich.

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ RSS ]
 
  • 1.1, butcher, 10:13, 25/02/2005 [ответить] [смотреть все]
  • +/
    Столкнулся с такой же проблемой во FreeBSD. Проделал всё, что здесь описано - не помогло.
    Перекомпилировал freetds с --disable-llibiconv и отключил в php - iconv.so. Всё заработало..
     
  • 1.3, Guest, 23:10, 02/12/2006 [ответить] [смотреть все]
  • +/
    Добрый вечер, статья уже давно утарела но до сих пор не могу нигде найти в нете и понять как привязать ПХП к MSSQL Express 2005. Может есть какая-нибудь ссылка ? |Windows XP|
     
     
  • 2.4, discover, 17:24, 04/12/2006 [^] [ответить] [смотреть все]
  • +/
    >Привет! не подскажешь, где можно скачать инфу по
    >PHP+MsSQL Server 2000

     
  • 2.5, discover, 17:28, 04/12/2006 [^] [ответить] [смотреть все]
  • +/
    Помогите найти доки по PHP+MsSQL Server 2000
     
  • 1.6, CoolModder, 09:50, 27/06/2008 [ответить] [смотреть все]
  • +/
    У меня возникла такая же хрень. У меня SQL 2005, при запросе данных русские буквы все вышли в виде вопросиков. Пробовал делать анализ функцией ord, все вопросики оказались с одним и тем же кодом. Дело было вот в чем - у базы данных в окне свойств свойство Collation было установлено в Latin. Попробовал поменять на CYRILLIC_GENERAL_CI_AS. Не получилось
    , в базе были зависимые от кодировки элементы. пасла другая вещь. При использовании запроса Select поле field также можно преобразовать средствами SQL SELECT convert (nvarchar(255),field)collate CYRILLIC_GENERAL_CI_AS as field. При этом будьте внимательны, поля типа Date не конвертирутся, а преобразование поля типа field.[table] будет записано так: SELECT convert (nvarchar(255),[table].field)collate CYRILLIC_GENERAL_CI_AS as field. Если кому надо, могу скинуть свою функцию автоматического преобразования входящего запроса.
     
     
  • 2.9, Благодарю, 14:02, 21/03/2013 [^] [ответить] [смотреть все]  
  • +/
    Спасибо, добрый человек! Только благодаря твоим советам победил эту связку. Дай Бог тебе много счастья!
     
  • 1.7, CoolModder, 15:10, 08/12/2008 [ответить] [смотреть все]  
  • +/
    Есть еще такая вещь, как ADO. У меня при подключении к одному MSSQL серверу все работало замечательно, но с другим были проблемы - без указания collation вместо русских букв выходили вопросики, а если в запросе были какие-либо параметры на кириллице - они не срабатывали, т.к. кириллица коверкалась из-за проблем с php_mssql.dll. Более того, у меня на этом сервере был установлен режим чтения и команды ALTER просто не могли быть выполнены. По этой ссылке есть работающий пример, как подключиться к MSSQL не используя php_mssql.dll. Моя проблема была решена.
    http://www.phpclub.net/manrus/class.com.html
     
  • 1.8, Виталий, 16:00, 16/08/2009 [ответить] [смотреть все]  
  • +/
    А кто может сказать, как задать кодировку win1251 для php скрипта работающего из cmd в windows? Дело в том, что когда он запускается из cmd он получает системную кодировку из окружения, которая по умолчанию равна cp866 и все данные получаемые из MSSQL сервера независимо от collation CYRILLIC_GENERAL_CI_AS получаются в cp866.
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:





      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor