Главная


Подключение к удаленной MsSQL базе данных с помощью PHP

     Подключение к удаленной MsSQL базе данных с помощью PHPНачну с того, что столкнулся с ситуацией, когда надо было синхронизировать данные с удаленной базы данных, которая, к тому же была MsSQL.При первой попытке подключиться с помощью mssql_connect получил ошибку подключения. Для более подробного меседжа решил использовать PDO и подключаться через ODBC драйвер.

     Установил ODBC драйвер для PDO и далее начал конфигурировать .ini ODBC и FreeTDS файлы. Ниже привожу пример, /etc/odbc.ini:


[ms-sql]

Description = TDS connection

Driver = ms-sql

Servername = ms-sql

Database = STELS

UID = user_stels

PWD = stelspass!

Port = 1433

ReadOnly = No


/etc/odbcinst.ini:

# Driver from the mysql-connector-odbc package

# Setup from the unixODBC package

[MySQL]

Description = ODBC for MySQL

Driver = /usr/lib/libmyodbc5.so

Setup = /usr/lib/libodbcmyS.so

Driver64 = /usr/lib64/libmyodbc5.so

Setup64 = /usr/lib64/libodbcmyS.so

FileUsage = 1



[ms-sql]

Description = TDS connection

Driver = /usr/lib64/libtdsodbc.so

Setup = /usr/lib64/libtdsS.so

UsageCount = 1

FileUsage = 1


/etc/freetds.conf

# A typical Sybase server

[egServer50]

host = symachine.domain.com

port = 5000

tds version = 5.0


# A typical Microsoft server

[ms-sql]

host = 192.168.12.3

port = 1433

tds version = 7.0


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

isql -v ms-sql user_stels stelspass!

     Подключился на ура. Теперь дошел черед до подключения через php. Накидал простенький скриптик:

<?php


//PDO connect

try {

$hostname = "192.168.12.3";

$dbname = "STELS"; //db name

$username = "user_stels"; // username like 'sa'

$pw = "stelspass!"; // password for the user

$dbh= new PDO('odbc:ms-sql', $username, $pw);

} catch (PDOException $e) {

echo "Failed to get DB handle: " . $e->getMessage() . " ";

exit;

}

?>


     После чего запустил в браузере исразу же получил ошибку:

PDO Failed to get DB handle: SQLSTATE[HY000] Unable to connect: Adaptive Server is unavailable or does not exist (severity 9)


     Скажу честно, потратил уйму времени в поисках ошибки. Но в результате добился, чего хотел.

     Выполнил следующую строку:

/usr/sbin/getsebool -a | grep httpd

Получил список параметров, с их статусами:

httpd_can_network_connect --> off

httpd_can_network_connect_db --> off


     Включить их очень просто:

/usr/sbin/setsebool -P httpd_can_network_connect 1

/usr/sbin/setsebool -P httpd_can_network_connect_db 1

     Перезагрузил скрипт, и вуаля, все работает:)


Комментарии