Ubuntu 10.04 Zend-сервер и соединение Informix - PullRequest
1 голос
/ 16 ноября 2010

У меня проблема с подключением PHP-скрипта к БД Informix.Я подумал об установке редакции сообщества Zend-сервера и, кроме того, расширения pdo_informix.Когда я запускаю администратора Zend-сервера в браузере, я вижу расширение pdo_informix, помеченное как «зеленое».После этого я установил Informix ClientSDK 3.70 в Ubuntu.Я установил переменную среды $ INFORMIXDIR в / etc / profile и в переменную PATH для каталога bin.Директория установки была / opt / IBM / informix.Когда я сейчас пытаюсь написать код на PHP, например

try{

 $db = new PDO("informix:host=xx.xx.com;database=xxx;server=xxx_net; protocol=onsoctcp;", databaseuser, databasepassword);
 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 echo "test";

}catch (PDOException $e){

 echo "<br/>Failed: ". $e->getMessage()."<br/>";
}

, в браузере появляется следующая ошибка:

Failed: SQLSTATE=HY000, SQLDriverConnect: -23101 [Informix]
   [Informix ODBC Driver][Informix]Unspecified System Error = -23101.

Если я пытаюсь подключиться к Server Studioв Ubuntu для Informix DB это работает хорошо, но я предполагаю, что они используют драйвер JDBC.

Если я перехожу в каталог bin моего Informix clientsdk, есть приложение, называемое finderr.Если я найду finderr -23101, я получу следующий вывод:

./finderr -23101
-23101 Unable to load locale categories.

Поэтому я подумал, что мне нужно установить переменные окружения DB_LOCALE, CLIENT_LOCALE ... мой сервер использует en_us.819, а мой клиентиспользуя en_us.utf8.

Ответы [ 2 ]

2 голосов
/ 18 ноября 2010

Отсутствие возможности загрузки категорий языковых стандартов обычно означает, что либо INFORMIXDIR не установлен для программного обеспечения, пытающегося получить доступ к данным языкового стандарта Informix (который находится в $ INFORMIXDIR / gls), либо что языковые категории не указаны или указаны неправильно. Это классические переменные среды CLIENT_LOCALE и DB_LOCALE, которые имеют такие значения, как 'en_us.8859-1' (по умолчанию) или 'es_es.utf8' (испанский в Испании, использующий UTF-8).

Я бы сосредоточился на том, чтобы в браузере была правильно настроена среда. Это может зависеть от того, как вы его запустите.

Есть некоторые другие переменные среды, которые можно использовать - DBLANG, LANG и набор имен LC_ *. Однако они вряд ли понадобятся, если установлены CLIENT_LOCALE и DB_LOCALE. С учетом вышесказанного я недавно обнаружил, что с Informix 4GL (I4GL) некоторый код, написанный с японскими символами в таких вещах, как имена таблиц, не будет компилироваться, если не был установлен DBLANG, а также переменные * LOCALE. Однако переменные LC * и LANG, по-видимому, оказывали минимальное влияние на результат или не влияли на него.

0 голосов
/ 17 ноября 2010

Вы, вероятно, должны установить LD_LIBRARY_PATH.Я делаю это с:

export LD_LIBRARY_PATH=$INFORMIXDIR/lib/:$INFORMIXDIR/lib/cli:$INFORMIXDIR/lib/esql:
export PATH=$INFORMIXDIR/bin:$INFORMIXDIR/lib:/usr/local/bin:/usr/bin:/bin

Если это не поможет, вы можете попробовать с unixODBC .Кажется, что PHP использует какой-то ODBC.В онлайн-руководствах unixODBC есть статья о подключении к Informix - читайте ее.Используйте isql (интерактивный SQL) инструмент unixODBC для подключения к настроенной базе данных ODBC.

Если isql не может подключиться к базе данных с такой же ошибкой, вы можете использовать strace, чтобы увидеть, какую библиотеку драйвер ODBC не можетнагрузка.

...