iODBC установлен по умолчанию как часть Mac OS X;был с Ягуара (10.2.x).Нет необходимости в UnixODBC на Mac, и это может привести к множеству ошибок, если вы не являетесь серьезным экспертом.Существует специальное руководство по использованию PHP с iODBC в Mac OS X .Для достижения наилучших результатов вам также может потребоваться обновление до последней версии iODBC для Mac OS X .
/opt/local/etc
, если не добавить к вашему $PATH
,через .profile
или иначе.
PHP определенно находит iODBC до UnixODBC, но это не должно быть проблемой;UnixODBC и iODBC обычно (и должны быть полностью) API-эквивалентными менеджерами драйверов ODBC.Если вы действительно обеспокоены этой частью, вы можете изменить $DYLD_LIBRARY_PATH
(версия MacOS X для Linux $LD_LIBRARY_PATH
) - но если PHP был связан с фреймворками iODBC, в отличие от dylibs, это не будетиметь какое-либо значение.
(Обратите внимание, что $DYLD_LIBRARY_PATH
также должен включать /opt/local/lib
, иначе ваш драйвер FreeTDS не будет загружаться.)
Для конкретной ошибки в вашем отчете - PHP должен иметь пару окруженийпеременные установлены, если вы не используете файлы конфигурации ODBC для Mac по умолчанию (системный уровень в /Library/ODBC/odbc[inst].ini
; пользовательский уровень в ~/Library/ODBC/odbc[inst].ini
... если присутствуют ~/.odbdc[inst].ini
файлы, они должны быть смешаны в ~/Library/ODBC/
файлов и заменены символическими ссылками на те же).
Если вы не хотите использовать iODBC или не хотите использовать эти файлы по умолчанию, вам нужно установить $ODBCINI
, чтобы указать файл odbc.ini
, в котором вы определили свой DSN, и$ODBCINSTINI
для файла odbcinst.ini
, который регистрирует драйвер, который вы хотите использовать.
Если вы хотите выполнить все вышеперечисленное, строки, подобные этим, должны быть добавлены в ваши файлы *.php
(оптимально черезоператор require
или include
для минимизации будущего редактирования) -
putenv("DYLD_LIBRARY_PATH=/path/to/odbcsdk/lib;$DYLD_LIBRARY_PATH");
putenv("ODBCINSTINI=/path/to/odbcinst.ini");
putenv("ODBCINI=/path/to/odbc.ini");
Я не могу быть точным в отношении настройки DYLD_LIBRARY_PATH
, потому что вы не указали, где находятся ваши библиотеки UnixODBC.Однако, если вы в порядке с iODBC в качестве менеджера драйверов и просто хотите, чтобы ваши библиотеки FreeTDS загружались, должно работать следующее:
putenv("DYLD_LIBRARY_PATH=/opt/local/lib;$DYLD_LIBRARY_PATH");
putenv("ODBCINSTINI=/opt/local/etc/odbcinst.ini");
putenv("ODBCINI=/opt/local/etc/odbc.ini");
Надеюсь, это поможет.
PS Inваше определение DSN, эта строка -
Driver = FreeTDS
- должна быть переписана.Либо понятное человеку имя драйвера должно быть заключено в фигурные скобки ({FreeTDS}
), либо вместо него должен быть указан полный путь к библиотеке драйверов (/opt/local/lib/libtdsodbc.so
).
Driver = {FreeTDS}
Driver = /opt/local/lib/libtdsodbc.so
I'mпредполагается, что у вас есть что-то вроде следующей индексной записи в вашем odbcinst.ini
-
[ODBC Drivers]
FreeTDS = Installed
- и что-то вроде следующей индексной записи в вашем odbc.ini
-
[ODBC Data Sources]
bti_dsn = FreeTDS
... но теперь я заметил, что ваша строка $ conn может просто нуждаться в коррекции.Посмотрите на аргументы odbc_connect
.
$conn = odbc_connect('bti_dsn;, $user, $pw);
Это должно выглядеть примерно так -
$conn = odbc_connect("bti_dsn", "$user", "$pw");