我在获取连接到Informix DB的PHP脚本时遇到了问题。我考虑安装Zend-server社区版,以及pdo_informix扩展。当我在浏览器中运行Zend-server admin时,我看到pdo_informix扩展被标记为“绿色”。之后,我在Ubuntu上安装了Informix 3.70。我已经将$INFORMIXDIR环境变量设置到/etc/profile和bin目录的PATH变量中。安装目录是/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.如果我尝试与Ubuntu上的Server Studio连接到Informix DB,它工作得很好,但我猜他们使用的是JDBC驱动程序。
如果我转到我的Informix客户端an的bin目录,有一个名为finderr的应用程序。如果我执行finderr -23101,我会得到以下输出:
./finderr -23101
-23101 Unable to load locale categories.所以我想我必须设置DB_LOCALE,CLIENT_LOCALE环境变量...我的服务器使用en_us.819,而我的客户端使用en_us.utf8。
发布于 2010-11-18 06:38:56
无法正常加载区域设置类别意味着没有为尝试访问Informix区域设置数据(位于$ INFORMIXDIR /gls中)的软件设置INFORMIXDIR,或者区域设置类别未指定或指定错误。这些是经典的环境变量CLIENT_LOCALE和DB_LOCALE,它们的值如'en_us.8859-1‘(默认值)或'es_es.utf8’(在西班牙使用UTF-8的西班牙语)。
我将专注于确保浏览器的环境设置正确。这可能取决于您如何启动它。
还可以使用其他一些环境变量- DBLANG、LANG和LC_*名称集。但是,如果设置了CLIENT_LOCALE和DB_LOCALE,则不太可能需要它们。话虽如此,但我最近发现,在Informix4GL (I4GL)中,如果不设置DBLANG和*语言环境变量,一些在表名中使用日语字符编写的代码将无法编译。然而,LC*和LANG变量似乎对结果的影响很小,甚至没有影响。
发布于 2010-11-17 15:20:34
您可能需要设置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。在Informix手册中有一篇关于连接到unixODBC的文章--请阅读它。使用isql (interactive SQL) unixODBC工具连接到已配置的ODBC数据库。
如果ODBC无法连接到数据库并返回相同的错误,那么您可以使用strace查看isql驱动程序无法加载的库。
https://stackoverflow.com/questions/4194895
复制相似问题