Я пытаюсь подключиться к базе данных SQL Azure через PHP, работающий на сервере Ubuntu 11.04.
На сервере работает версия PHP => 5.3.5-1ubuntu7.11.
Я установил freetds-bin, freetds-common, tdsodbc, odbcinst, php5-odbc и unixodbc, используя apt-get install несколько раз. Я попытался скомпилировать FreeTDS с поддержкой SSL, но не уверен, что это удалось.
На этом этапе я получаю сообщение об ошибке «08S01 - Ошибка канала связи» при попытке подключиться с помощью инструмента isql. В статье Microsoft ошибка объясняется следующим образом: «Связь между драйвером и источником данных, к которому драйвер пытался подключиться, не удалось до того, как функция SQLDriverConnect завершила обработку». Некоторые исследования по этому поводу конкретно указывают на отсутствие поддержки SSL в FreeTDS, но я не понимаю, как проверить, что это было включено.
Я буду использовать либо объекты данных PHP, либо функции 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:
[Вт, 24 декабря, 13:23:10 2013] [ошибка] [клиент 10.1.1.11] Неустранимая ошибка PHP: Неперехваченное исключение «PDOException» с сообщением «SQLSTATE [08S01] SQLDriverConnect: 20004 [unixODBC] [FreeTDS] [SQL Server] Чтение сбой с сервера 'в /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 брошено в /var/www/test/pdo.php в строке 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
Любая помощь в этом беспорядке будет очень признательна. Я явно потерялся в этот момент. Спасибо!