FreeTDS mssql_connect не работает

У меня есть настройка лампы UBUNTU. Все необходимые расширения установлены

php5-odbc
php5-mssql
FREETDS
unixODBC

Из CLI я проверил мое соединение с БД, используя isql а также tsql и оба соединяются и работают отлично.

Вот мой freetds.conf:

    ....
# A typical Microsoft server
[TS]
host = 10.32.6.52
port = 1433
tds version = 8.0
client charset = UTF-8

Вот мой odbc.ini

[TS]
Description = "XXXXXXX"Driver = /usr/local/lib/libtdsodbc.so
Server = xxx.xxx.xxx.xxx
Port = 1433
Database = XX_X_XX_XXXXX
Trace = No
TDS_Version = 8.0
[Default]
Driver=/usr/local/lib/libtdsodbc.so

Вот мой odbcinst.ini

[FreeTDS]
Description = FreeTDS
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
FileUsage = 1
CPTimeout =
CPResuse  =
client charset = utf-8
UsageCount = 1

А вот и мой php

<?php

putenv("TDSVER=80");
putenv("FREETDSCONF=/etc/freetds/freetds.conf");
putenv("ODBCSYSINI=/etc/odbcinst.ini");
putenv("ODBCINI=/etc/odbc.ini");


$myServer = "XXX.XXX.XXX.XXX";
$username = "XXXXX";
$password = "XXXXX";
$database = "XXXXX";

//connection to the database
$dbhandle = mssql_connect($myServer, $username, $password)
or die("Couldn't connect to SQL Server on $myServer");

//select a database to work with
$selected = mssql_select_db($database, $dbhandle)
or die("Couldn't open database $myDB");

//declare the SQL statement that will query the database
$query = "SELECT title from project where id = 8 ";

//execute the SQL query and return records
$result = mssql_query($query);

$numRows = mssql_num_rows($result);
echo "<h1>" . $numRows . " Row" . ($numRows == 1 ? "" : "s") . " Returned </h1>";

//display the results
while($row = mssql_fetch_array($result))
{
echo "<li>" . $row["title"] . "</li>";
}
//close the connection
mssql_close($dbhandle);
?>

Как я сказал из CLI, я могу подключиться к серверу SQL, но из php это не работает. Я перепробовал все предложения, которые смог найти, но у меня ничего не получалось.

Также для справки вот мой журнал ошибок Apache:

[Tue Jun 09 08:32:41.931108 2015] [:error] [pid 21435] [client 10.32.6.65:54994] PHP Warning:  mssql_connect(): Unable to connect to server: XXXXXXXX in /var/www/html/test/sqltest.php on line 15
[Tue Jun 09 08:32:41.931124 2015] [:error] [pid 21435] [client 10.32.6.65:54994] PHP Stack trace:
[Tue Jun 09 08:32:41.931134 2015] [:error] [pid 21435] [client 10.32.6.65:54994] PHP   1. {main}() /var/www/html/test/sqltest.php:0
[Tue Jun 09 08:32:41.931142 2015] [:error] [pid 21435] [client 10.32.6.65:54994] PHP   2. mssql_connect() /var/www/html/test/sqltest.php:15

1

Решение

Нашел проблему и решил ее. Я включил Freetds.log, раскомментировав местоположение файла журнала в /etc/freetds/freetds.conf

Вот извлечение файла журнала

config.c:303:[XXXXXXXXX] not found.
config.c:367:... $FREETDS not set.  Trying $HOME.
config.c:293:Could not open '/var/www/.freetds.conf' ((.freetds.conf)).
config.c:297:Found conf file '/usr/local/etc/freetds.conf' (default).
config.c:483:Looking for section global.
config.c:542:   Found section global.
config.c:545:Got a match.
config.c:567:   text size = '64512'
config.c:542:   Found section egserver50.
config.c:542:   Found section egserver70.
config.c:556:   Reached EOF
config.c:483:Looking for section XXXXXXXXXXXX.
config.c:542:   Found section global.
config.c:542:   Found section egserver50.
config.c:542:   Found section egserver70.
config.c:556:   Reached EOF
config.c:303:[XXXXXXXXXXXX] not found.
config.c:208:Failed in reading conf file.  Trying interface files.
config.c:1042:Looking for server XXXXXXXXXXX....

Так что в основном он искал мое имя сервера в файлах freetds.conf. но я не уточнил это. информация о подключении была указана в файле конфигурации как [TS] я изменил свою информацию php, чтобы искать [TS] и вдруг это сработало

$myServer = "TS";
$username = "XXXXX";
$password = "XXXXX";
$database = "XXXXX";
0

Другие решения

Я просто хотел опубликовать это на тот случай, если это поможет любому, кто может столкнуться с той же проблемой:

Что в итоге сработало для меня: изменение $host ценность в моем PHP Строка подключения к ссылочному имени сервера, к которому я пытался подключиться, как я указал в freetds.conf а также .odbc.iniвместо фактического IP адрес.

Спасибо @ Stroes за указание мне в правильном направлении. Эта проблема буквально чуть не разрыдала меня после более чем недели чтения статей и устранения неполадок.

0

По вопросам рекламы [email protected]