2017-10-10 238 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)文件進行檢查。 –