2015-06-09 6 views
1

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

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 Error Log:

[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 

ответ

0

Нашли проблему и решить ее. Я позволил 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.

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