2013-12-24 3 views
4

Я пытаюсь подключиться к базе данных SQL Azure через PHP, работающий на сервере Ubuntu 11.04.Подключиться к SQL Azure с PHP на Ubuntu

На сервере работает PHP Version => 5.3.5-1ubuntu7.11.

Я установил freetds-bin, freetds-common, tdsodbc, odbcinst, php5-odbc и unixodbc, используя apt-get install несколько раз. Я попытался скомпилировать FreeTDS с поддержкой SSL, но я не уверен, что это было успешным.

В этот момент при попытке подключения с помощью инструмента isql появляется сообщение об ошибке «08S01 - Ошибка связи». Статья Microsoft объясняет эту ошибку следующим образом: «Связь между драйвером и источником данных, к которой пыталась подключиться драйвер, не была выполнена до завершения обработки функции SQLDriverConnect». Некоторые исследования по этому вопросу указывают на отсутствие поддержки SSL в FreeTDS, но я не знаю, как проверить, что было включено.

Я буду использовать объекты PHP Data Objects или mssql_ * для подключения к базе данных SQL Azure. Я менее знаком с PDO, но кажется, что PDO не обязательно использует ODBC? Я не совсем понимаю это, и я подозреваю, что это побуждает меня устранять проблемы, обнаруженные isql, которые не связаны с проблемами, которые я вижу на PHP. Проблемы с связью с инструментом isql связаны с проблемами подключения в PDO или mssql_ * в PHP?

Моя последняя попытка, используя PDO, является:

<?php 

$c = new PDO("odbc:Driver=FreeTDS;Port=1433;Server=sssssssssss.database.windows.net;Database=db_xxxxx_xxx_xxx;UID=db_xxxxx_xxx_xxx_ExternalWriter;PWD=ppppppppp"); 

?> 

Этот код генерирует следующие ошибки в файле протокола Apache:

[Tue Dec 24 13:23:10 2013] [error] [client 10.1.1.11] PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[08S01] SQLDriverConnect: 20004 [unixODBC][FreeTDS][SQL Server]Read from the server failed' in /var/www/test/pdo.php:3\nStack trace:\n#0 /var/www/test/pdo.php(3): PDO->__construct('odbc:Driver=Fre...')\n#1 {main}\n thrown in /var/www/test/pdo.php on line 3

Мой /etc/freetds/freetds.conf:

[global] 
     # TDS protocol version 
     tds version = 9.1 

     # Whether to write a TDSDUMP file for diagnostic purposes 
     # (setting this to /tmp is insecure on a multi-user system) 
     dump file = /tmp/freetds.log 
     debug flags = 0xffff 

     # Command and connection timeouts 
     ;  timeout = 10 
     ;  connect timeout = 10 

     # If you get out-of-memory errors, it may mean that your client 
     # is trying to allocate a huge buffer for a TEXT field. 
     # Try setting 'text size' to a more reasonable limit 
     text size = 64512 

# A typical Microsoft server 
[FreeTDS] 
     host = ssssssssss.database.windows.net 
     port = 1433 
     tds version = 9.1 
     client charset = UTF-8 

файла /etc/odbc.ini:

[TS] 
Description    = "test" 
Driver     = FreeTDS 
Server     = sssssssssssss.database.windows.net 
Port     = 1433 
Database    = db_xxxxxxx_xxx_xxx 

/etc/odbcinst.ini

[FreeTDS] 
Description  = tdsodbc 
Driver   = /usr/lib/odbc/libtdsodbc.so 

Любая помощь в этой каше будет очень высокую оценку. В этот момент я потерял сознание. Благодаря!

+0

Я выполнил документацию FreeTDS по адресу http://www.freetds.org/userguide/config.htm при настройке FreeTDS и http://www.freetds.org/userguide/install.htm при ее установке. tsql -H sss.database.windows.net -p 1433 -U пользователь -P pwd теперь возвращает «Не удается открыть сервер sss», запрошенный логином. Клиенту с IP-адресом «nnnn» не разрешен доступ к серверу. Чтобы разрешить доступ, используйте Портал управления Windows Azure или запустите ... «Очевидно, что ошибка исходит от Azure и, по крайней мере, происходит соединение. Брандмауэр SQL Azure настроен для обеспечения возможности подключения с любого компьютера. – wolfet410

ответ

0

Я не пробовал с Azure специально, но на локальных машинах SQL Server мы здесь я нашел php5-модуль с Sybase PDO, чтобы быть массово легче жить, чем FreeTDS:

apt-get install php5-sybase 

<?php 
$dsn = 'dblib:dbname=TestDB;host=sqlserver;charset=UTF-8'; 
$dbh = new PDO($dsn, 'username', 'password'); 

Кроме того, при устранении неполадок я нахожу, что следы Wireshark трассировки DB-трафика являются просветительскими, так как часто очень полезные сообщения, испускаемые SQL-сервером, которые не выходят из PDO-ошибки.