2017-10-10 237 views
0

SQLSTATE = HY000,的SQLDriverConnect:-23101 [Informix的] [Informix ODBC驱动程序] [Informix的]未指定系统错误= -23101PHP PDO_INFORMIX区域设置错误-23101

OS:Ubuntu的16.04 64bits的

  • 安装的Informix CSDK(版本4.10)
  • 编译PDO_INFORMIX(版本1.3.3)

  • 在apache配置启用pdo_informix.so延伸

  • 设置apache的环境变量

    1 - INFORMIXDIR = /选择/ Informix的(其中,我安装CSDK)

    2 - DB_LOCALE = en_US.819

    3 - CLIENT_LOCALE = en_US.utf8

连接字符串:$instance = new PDO("informix:host=$host;service=$port;database=$db;server=ol_standard;protocol=onsoctcp;client_locale=en_US.utf8;db_locale=en_US.819;EnableScrollableCursors=1;OPTIMIZEAUTOCOMMIT=1", $usr, $pwd);

23101错误是关于DB_LOCALE和CLIENT_LOCALE,但它已全部设置。

+0

是的,23101肯定是没有找到GLS文件。你确定INFORMIXDIR的设置是否正确?可以尝试的方法是将环境变量“GLSDEBUG”设置为“on”(例如,export GLSDEBUG = on)并检查运行脚本的输出。它应该跟踪所有的GLS调用,显示哪个文件无法打开。 –

+0

您在所有大写中使用OPTIMIZEAUTOCOMMIT。你确定你可以使用'db_locale'而不需要使用'DB_LOCALE'吗?同上'client_locale'和'CLIENT_LOCALE'? –

回答

0

看看错误消息中的文本,我认为你不仅仅是一个区域设置问题(23101)。

如果你:“未指定的系统错误

不如说:“无法加载语言环境类别

这意味着驱动程序无法找到正确的文本消息的 - 23101错误,这通常发生在INFORMIXDIR未正确设置时。

'.iem'文件(在$ INFORMIXDIR/msg/en_us/0333中)包含每个错误编号的文本消息。如果找不到消息,则会得到一个通用的“未指定的系统错误”。

你提到过Apache,所以我想你正在尝试从apache运行PHP代码,而不仅仅是命令行。 Apache可能不会将env变量传递给PHP模块。 如果Apache的ENV模块(mod_env.so)被启用,你可能想尝试把这样的事情在你的httpd.conf文件

setenv INFORMIXDIR '/opt/informix' 

所以INFORMIDIR变量将被传递给PDO模块。

+0

J_S,INFORMIXDIR的设置就像你说的那样(setenv INFORMIXDIX'opt/informix'在我的apache2.conf中。mod_env模块已启用。代码错误-23101与locale问题有关。 –

+0

23101是“无法加载语言环境类别”,但是您得到的是“未指定的系统错误”,只有当负责加载特定错误消息的函数无法找到消息文件时才会发生此情况。当INFORMIXDIR未设置时会发生这种情况。您可以尝试对httpd进程进行truss(strace)操作,并从哪里尝试加载iem/lc(locale)文件进行检查。 –