У меня Red Hat Linux 6 с установленными и запущенными Apache и PHP. Я установил MS SQL Server и драйвер Teradata, и я могу подключаться и выполнять запросы к этим базам данных через iSQL на серверном терминале.
Когда я пытаюсь использовать соединение ODBC через скрипт PHP, я могу подключиться и выполнить запросы на MS SQL Server, но если я пытаюсь подключиться к базе данных Teradata, я получаю следующее сообщение об ошибке:
Предупреждение: odbc_connect (): ошибка SQL: [unixODBC] [Driver Manager] Не удается
открыть lib ‘/opt/teradata/client/14.10/odbc_64/lib/tdata.so’: файл не
найдено, состояние SQL 01000
Этот файл, tdata.so, существует в указанном местоположении, и имеет все возможные разрешения.
PHP-код:
$con_string = "DRIVER={Teradata};DBCName=SERVER; DATABASE=MYDB;";
$con = odbc_pconnect( $con_string , "USER", "PASSWORD" );
Файл odbc.ini (находится в /etc/odbc.ini) содержит следующее:
[Teradata]
Driver=/opt/teradata/client/14.10/odbc_64/lib/tdata.so
Description=Teradata database
DBCName=SERVER
LastUser=
Username=
Password=
Database=
DefaultDatabase=
[MSSQL]
Description=Microsoft ODBC Driver 17 for SQL Server A
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.1.so.0.1
UsageCount=1
Когда я выполняю команду:
ldd /opt/teradata/client/14.10/odbc_64/lib/tdata.so
Я получаю этот ответ:
linux-vdso.so.1 => (0x00007ffff03ff000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007fb736c1e000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fb736a07000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fb7367ea000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fb7365e6000)
librt.so.1 => /lib64/librt.so.1 (0x00007fb7363dd000)
libnsl.so.1 => /lib64/libnsl.so.1 (0x00007fb7361c4000)
libodbcinst.so => /opt/teradata/client/14.10/odbc_64/lib/libodbcinst.so (0x00007fb735fa0000)
libddicu26.so => /opt/teradata/client/14.10/odbc_64/lib/libddicu26.so (0x00007fb7350a8000)
libtdparse.so => /opt/teradata/client/14.10/odbc_64/lib/libtdparse.so (0x00007fb734f22000)
libicudatatd.so.46 => /usr/lib64/libicudatatd.so.46 (0x00007fb7346d8000)
libicuuctd.so.46 => /usr/lib64/libicuuctd.so.46 (0x00007fb73444a000)
libm.so.6 => /lib64/libm.so.6 (0x00007fb7341c6000)
libc.so.6 => /lib64/libc.so.6 (0x00007fb733e32000)
/lib64/ld-linux-x86-64.so.2 (0x0000003727400000)
Путь кажется правильно настроенным, когда я выполняю команду:
echo $LD_LIBRARY_PATH
Я получаю этот ответ:
/opt/teradata/client/14.10/odbc_64/lib:/opt/teradata/client/14.10/lib:/opt/teradata/client/14.10/tbuild/lib:/opt/teradata/client/14.00/odbc_64/lib::/usr/lib
Я не могу понять, что не так, я пробовал различные возможные решения, но ничего не работает для меня. Кто-нибудь может помочь?
Задача ещё не решена.
Других решений пока нет …