Я пытаюсь получить установку PHP 5.3.10 на Ubuntu 12.04 для подключения к удаленному серверу SQL Anywhere 12 (Sybase?) с использованием ODBC (unixODBC). Однако выполнение PHP останавливается на odbc_connect().
Код PHP:
$odbc = odbc_connect('DSN=TP189902;', 'username', 'password');
if ($odbc)
{
echo 'Connected';
}
else
{
echo 'Failed: '.odbc_error($odbc);
}
Таким образом, независимо от того, подключается он или нет, он должен выводить одно из эхо, но это не так. Если вместо этого я попытаюсь использовать библиотеку PHP PDO, я получу тот же результат.
Моя настройка unixODBC выглядит следующим образом. И это может быть моей ошибкой, потому что я никогда раньше не устанавливал ODBC в Linux и не очень хорошо с этим знаком.
odbcinst.ini
[SQL Anywhere 12]
Description = SQL Anywhere 12
Driver = /opt/sqlanywhere12/lib64/libdbodbc12.so
Setup = /opt/sqlanywhere12/lib64/libdbodbc12.so
odbc.ini
[TP189902]
Description = TP189902
Uid = username
Pwd = password
Driver = SQL Anywhere 12
ServerName = 189902
CommLinks = tcpip(Host=1.2.3.4)
DatabaseName = DB189902
Я также пробовал множество альтернатив, таких как использование пути драйвера для значения драйвера, использование Host=1.2.3.4 вместо CommLinks и т. д.
Также команда isql -v TP189902 username password
ничего не выводит, если я не даю ей фальшивый DSN, чтобы она выводила и выдавала ошибку.
Я также проверил, что libdbodbc12.so имеет ту же архитектуру, что и isql, и что он имеет все зависимости.
Кроме того, у меня очень похожая настройка на машине с Windows 7, на которой работает WAMP, которая прекрасно подключается (как с библиотекой ODBC, так и с библиотекой PDO). Я использовал те же данные DSN.
Редактировать: я также пытался пропустить DSN, но это дает тот же результат. Это также работает на коробке Windows.
$odbc = odbc_connect('Driver={SQL Anywhere 12};Server=189902;CommLinks=tcpip(Host=1.2.3.4);', 'username', 'password');