Ubuntu, php и mssql

Возникла необходимость пересесть с уютного mysql на mssql. Делом это окзалось не таким уж и простым и полной инструкции в рунете я не нашел. У меня, как на ноуте, так и на сервере стоит убунта, так что напишу инструкцию для нее.
Для начала ставим модуль для php.
sudo apt-get install php5-sybase
После этого phpinfo() стал показывать блок mssql вот так:

Далее установим необходимые пакеты:
sudo aptitude install tdsodbc unixodbc odbc-bin php5-odbc

Настройка FreeTDS.
Для настройки FreeTDS нужно в конфигурационный файл /etc/freetds/freetds.conf добавить новую секцию для нашего M$ SQL сервера (название секции может быть любым):

[MsSQL]
host = sql.mydomen.ru
port = 1433
tds version = 8.0
client charset = WINDOWS-1251

где:
host — доменное имя или IP сервера с SQL.
tds version — версия протокола TDS, которая определяется по таблице. Версия 8.0 для Microsoft SQL Server 2000.
FreeTDS использует iconv для перекодирования потока. Если client charset не установлена, то перекодировка отключается и используется дефолтная ISO-8859-1. Эта переменная может принимать все кодировки библиотеки iconv.

Настройка ODBC.
Чтобы ODBC работала с FreeTDS нужно настроить драйвера, для этого скопируем файл описания драйверов из поставки FreeTDS /usr/share/freetds/odbcinst.ini в /etc/odbcinst.ini или, если /etc/odbcinst.ini уже существует и в нем есть записи других драйверов, добавим секцию для FreeTDS:

[FreeTDS]
Description = TDS driver (Sybase/MS SQL)
Driver = /usr/lib/odbc/libtdsodbc.so
Setup = /usr/lib/odbc/libtdsS.so
CPTimeout =
CPReuse =

Далее нужно настроить систему ODBC. Сделать это можно 2-мя путями:

Посредством графической утилиты ODBCConfig (из пакета odbc-bin).
Отредактировать файл /etc/odbc.ini, внеся в него соответствующие секции:

[SQLOnLine]
Description = FreeTDS
Driver = FreeTDS
Servername = MsSQL
Database = Report
UID = user
PWD = passwd
Port = 1433

где:
Description — описание драйвера.
Driver — имя раздела из файла /etc/odbcinst.ini.
Servername — имя раздела, описывающего сервер БД, из файла /etc/freetds/freetds.conf.
Database — имя базы данных на MS SQL сервере, к которой нужно получить доступ.
UID и PWD — пользователь, заведенный на MS SQL сервере.

Для проверки я использовал вот такой код:
echo «Testing...»;
if ($db = mssql_connect(‘ip:port’,’user’,’pass’)){;
echo $db;
mssql_select_db(‘BASE’, $db);
echo «connected to a database»;
mssql_close($db);
} else {
echo «connection failed»;
}
echo « end»;

Где
ip — адрес сервера
port — порт
user — имя пользователя для базы
pass — пароль
BASE — имя базы данных

Скрипт отработал и вывел в браузер
Testing...Resource id #1connected to a database end
Что значит, что все работает ок.

Все вышеописанное не моя придумка, а сбор кусков разной длинны из разных источников. Надеюсь, что в таком виде кому-нибудь все это пригодиться.

Share
Send
Pin
Popular