PHP PDO_Informix区域设置错误-23101

PHP PDO_Informix区域设置错误-23101,php,pdo,informix,Php,Pdo,Informix,SQLSTATE=HY000,SQLDriverConnect:-23101[Informix][Informix-ODBC-Driver][Informix]未指定的系统错误=-23101 操作系统:Ubuntu 16.04 64位 安装Informix CSDK(版本4.10) 编译PDO_INFORMIX(版本1.3.3) 在apache配置中启用pdo_informix.so扩展 设置apache环境变量 1-INFORMIXDIR=/opt/informix(我在其中安装了CSDK)

SQLSTATE=HY000,SQLDriverConnect:-23101[Informix][Informix-ODBC-Driver][Informix]未指定的系统错误=-23101

操作系统:Ubuntu 16.04 64位

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

  • 在apache配置中启用pdo_informix.so扩展

  • 设置apache环境变量

    1-INFORMIXDIR=/opt/informix(我在其中安装了CSDK)

    2-DB_LOCALE=en_US.819

    3-客户端语言环境=en_US.utf8

连接字符串:
$instance=new PDO(“informix:host=$host;service=$port;database=$db;server=ol\u-standard;protocol=onscoctcp;client\u-locale=en\u-US.utf8;db\u-locale=en\u-US.819;EnableScrollableCursors=1;OPTIMIZEAUTOCOMMIT=1”,$usr,$pwd)


23101错误与DB_LOCALE和CLIENT_LOCALE有关,但都已设置好。

查看错误消息中的文本,我认为您不仅仅存在区域设置问题(23101)

如果您得到:“未指定的系统错误

而是:“无法加载区域设置类别”

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

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

您提到了Apache,所以我想您正在尝试从Apache运行PHP代码,而不仅仅是命令行。Apache可能没有将env变量传递给PHP模块。 如果启用了ApacheEnv模块(mod_env.so),您可能希望尝试在httpd.conf文件中添加类似的内容

 setenv INFORMIXDIR '/opt/informix'   

因此,INFORMIDIR变量将被传递到PDO模块

是的,23101肯定是关于找不到GLS文件。您确定INFORMIXDIR设置正确吗?。您可以尝试将环境变量“GLSDEBUG”设置为“on”(例如export GLSDEBUG=on)并检查运行脚本的输出。它应该跟踪所有GLS调用,显示无法打开的文件。您可以在所有CAP中使用OPTIMIZEAUTOCOMMIT。是否确实允许您使用
db\u locale
,而不要求您使用
db\u locale
?同上
client_locale
client_locale
?没错,INFORMIXDIR是按照你说的那样设置的(setenv INFORMIXDIX'opt/informix'在我的apache2.conf中。mod_env模块是启用的。代码错误-23101是关于区域设置的问题。23101是“无法加载区域设置类别”,但是你得到了“未指定的系统错误”相反,只有当负责为特定错误加载消息的函数找不到消息文件时,才会发生这种情况。如果未设置INFORMIXDIR,则会发生这种情况。您可以尝试执行httpd进程的truss(strace)并检查试图从何处加载iem/lc(locale)files.quick note,如果运行Apache(通常为“www数据”)的用户无法访问$INFORMIXDIR,也可能会出现23101。环境变量可能会正确地传递给PDO模块,但如果用户无法获取INFORMIXDIR中的内容,它将失败。