2010-11-16 2 views
1

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

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. 

Если я пытаюсь соединиться с Studio Server на 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

Невозможно загрузить категории локали, как правило, означает, что либо 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

+1 к INFORMIXDIR не установлен. Это было сожжено этой самой проблемой, когда Apache отсутствовал в среде Informix. –

0

Возможно, вам необходимо установить 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 - прочитайте ее. Используйте инструмент unixODBC isql (интерактивный SQL) для подключения к настроенной базе данных ODBC.

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

Смежные вопросы